<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Волчьи IT-мысли</title>
	<atom:link href="http://sww-it.ru/feed" rel="self" type="application/rss+xml" />
	<link>http://sww-it.ru</link>
	<description>Компьютерная безопасность, IT, антивирусная индустрия.</description>
	<lastBuildDate>Wed, 18 Jan 2012 11:20:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Building the next generation file system for Windows: ReFS</title>
		<link>http://sww-it.ru/2012-01-18/562?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=building-the-next-generation-file-system-for-windows-refs</link>
		<comments>http://sww-it.ru/2012-01-18/562#comments</comments>
		<pubDate>Wed, 18 Jan 2012 11:20:32 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Без перевода]]></category>
		<category><![CDATA[msdn]]></category>
		<category><![CDATA[ReFS]]></category>
		<category><![CDATA[windows 8]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=562</guid>
		<description><![CDATA[<p align="justify">We wanted to continue our dialog about data storage by talking about the next generation file system being introduced in Windows 8. Today, NTFS is the most widely used, advanced, and feature rich file system in broad use. But when you’re reimagining Windows, as we are for Windows 8, we don’t rest on past [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">We wanted to continue our dialog about data storage by talking about the next generation file system being introduced in Windows 8.  Today, NTFS is the most widely used, advanced, and feature rich file system in broad use. But when you’re reimagining Windows, as we are for Windows 8, we don’t rest on past successes, and so with Windows 8 we are also introducing a newly engineered file system. ReFS, (which stands for Resilient File System), is built on the foundations of NTFS, so it maintains crucial compatibility while at the same time it has been architected and engineered for a new generation of storage technologies and scenarios. In Windows 8, ReFS will be introduced only as part of Windows Server 8, which is the same approach we have used for each and every file system introduction. Of course at the application level, ReFS stored data will be accessible from clients just as NTFS data would be. As you read this, let’s not forget that NTFS is by far the industry’s leading technology for file systems on PCs.</p>
<p><a href="http://blogs.msdn.com/b/b8/archive/2012/01/16/building-the-next-generation-file-system-for-windows-refs.aspx">Дальше</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2012-01-18%2F562&amp;title=Building%20the%20next%20generation%20file%20system%20for%20Windows%3A%20ReFS" id="wpa2a_2"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2012-01-18/562/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Легальные буткиты</title>
		<link>http://sww-it.ru/2011-11-28/558?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25bb%25d0%25b5%25d0%25b3%25d0%25b0%25d0%25bb%25d1%258c%25d0%25bd%25d1%258b%25d0%25b5-%25d0%25b1%25d1%2583%25d1%2582%25d0%25ba%25d0%25b8%25d1%2582%25d1%258b</link>
		<comments>http://sww-it.ru/2011-11-28/558#comments</comments>
		<pubDate>Mon, 28 Nov 2011 12:02:25 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[bootkit]]></category>
		<category><![CDATA[rootkit]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=558</guid>
		<description><![CDATA[<p align="justify">Ни для кого не секрет, что в некоторых легальных продуктах используются руткит-технологии.</p> <p align="justify">В антивирусных продуктах различные проактивные механизмы защиты применяют перехваты системных функций в том или ином виде. Вредоносный код также использует подобные алгоритмы, однако, антивирусное ПО, в отличие от вредоносного кода, не пытается скрыть модификации, произведенные в системе.</p> <p align="justify">Насколько вообще оправдано [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Ни для кого не секрет, что в некоторых легальных продуктах используются руткит-технологии.</p>
<p align="justify">В антивирусных продуктах различные проактивные механизмы защиты применяют перехваты системных функций в том или ином виде. Вредоносный код также использует подобные алгоритмы, однако, антивирусное ПО, в отличие от вредоносного кода, не пытается скрыть модификации, произведенные в системе.</p>
<p align="justify">Насколько вообще оправдано использование руткит-технологий в легальном программном обеспечении? Насколько при использовании таких технологий в легальных продуктах велик риск компрометации операционной системы и пользовательских данных? Насколько тонка грань между легальными и киберкриминальными методами?</p>
<p><a href="http://www.securelist.com/ru/analysis/208050726/Legalnye_butkity">Дальше</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2011-11-28%2F558&amp;title=%D0%9B%D0%B5%D0%B3%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D0%B1%D1%83%D1%82%D0%BA%D0%B8%D1%82%D1%8B" id="wpa2a_4"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2011-11-28/558/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>The NT Insider: September/October Issue</title>
		<link>http://sww-it.ru/2011-10-13/554?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-nt-insider-septemberoctober-issue</link>
		<comments>http://sww-it.ru/2011-10-13/554#comments</comments>
		<pubDate>Thu, 13 Oct 2011 09:25:23 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[the nt insider]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=554</guid>
		<description><![CDATA[<p>http://insider.osr.com/2011/ntinsider_2011_03.pdf</p> ]]></description>
			<content:encoded><![CDATA[<p><a href="http://insider.osr.com/2011/ntinsider_2011_03.pdf" title="http://insider.osr.com/2011/ntinsider_2011_03.pdf">http://insider.osr.com/2011/ntinsider_2011_03.pdf</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2011-10-13%2F554&amp;title=The%20NT%20Insider%3A%20September%2FOctober%20Issue" id="wpa2a_6"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2011-10-13/554/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MYBIOS. Возможно ли заразить BIOS?</title>
		<link>http://sww-it.ru/2011-09-15/550?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mybios-%25d0%25b2%25d0%25be%25d0%25b7%25d0%25bc%25d0%25be%25d0%25b6%25d0%25bd%25d0%25be-%25d0%25bb%25d0%25b8-%25d0%25b7%25d0%25b0%25d1%2580%25d0%25b0%25d0%25b7%25d0%25b8%25d1%2582%25d1%258c-bios</link>
		<comments>http://sww-it.ru/2011-09-15/550#comments</comments>
		<pubDate>Thu, 15 Sep 2011 09:37:54 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Вирусный анализ]]></category>
		<category><![CDATA[mybios]]></category>
		<category><![CDATA[rootkit]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=550</guid>
		<description><![CDATA[<p align="justify">Возможность заражения BIOS существует довольно-таки давно. Одна из лучших, на мой взгляд, статей на эту тему размещена в журнале Phrack, а на ресурсе pinczakko расположено много полезной информации. В данный момент прослеживается очевидная тенденция, которую я бы обозначил как «возвращение к истокам». Заражение MBR, перехваты указателей в различных системных таблицах операционной системы, заражение системных [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Возможность заражения BIOS существует довольно-таки давно. Одна из лучших, на мой взгляд, статей на эту тему размещена в журнале <a href="http://www.phrack.org/issues.html?issue=66&#038;id=7">Phrack</a>, а на <a href="http://sites.google.com/site/pinczakko/bios-articles">ресурсе</a> pinczakko расположено много полезной информации. В данный момент прослеживается очевидная тенденция, которую я бы обозначил как «возвращение к истокам». Заражение MBR, перехваты указателей в различных системных таблицах операционной системы, заражение системных компонентов — все это уже было, и очень давно.</p>
<p align="justify">Как и в случае с MBR заражение BIOS позволяет вредоносному коду инициализироваться очень рано, сразу после включения компьютера. С этого момента появляется возможность контролировать все этапы загрузки компьютера и операционной системы. Очевидно, что такой метод загрузки привлекателен для вирусописателей, однако очевидны и трудности, с которыми они сталкиваются. Прежде всего — это неунифицированный формат BIOS: создателю вредоносной программы необходимо поддержать BIOS от каждого производителя и разобраться с алгоритмом прошивки в ROM.</p>
<p><a href="http://www.securelist.com/ru/analysis/208050716/MYBIOS_Vozmozhno_li_zarazit_BIOS">Дальше</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2011-09-15%2F550&amp;title=MYBIOS.%20%D0%92%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%BB%D0%B8%20%D0%B7%D0%B0%D1%80%D0%B0%D0%B7%D0%B8%D1%82%D1%8C%20BIOS%3F" id="wpa2a_8"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2011-09-15/550/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Свежий взгляд на антиотладку</title>
		<link>http://sww-it.ru/2011-06-02/543?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d1%2581%25d0%25b2%25d0%25b5%25d0%25b6%25d0%25b8%25d0%25b9-%25d0%25b2%25d0%25b7%25d0%25b3%25d0%25bb%25d1%258f%25d0%25b4-%25d0%25bd%25d0%25b0-%25d0%25b0%25d0%25bd%25d1%2582%25d0%25b8%25d0%25be%25d1%2582%25d0%25bb%25d0%25b0%25d0%25b4%25d0%25ba%25d1%2583</link>
		<comments>http://sww-it.ru/2011-06-02/543#comments</comments>
		<pubDate>Thu, 02 Jun 2011 13:19:59 +0000</pubDate>
		<dc:creator>priv8v</dc:creator>
				<category><![CDATA[Отладка]]></category>
		<category><![CDATA[anti-debug]]></category>
		<category><![CDATA[IsDebuggerPresent]]></category>
		<category><![CDATA[анти-отладка]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=543</guid>
		<description><![CDATA[<p align="justify">Ниже пойдет речь исключительно об OllyDbg и плагинах к ней, но описанный подход и сами идеи при определенных навыках вы сможете использовать применительно и к другим утилитам такого класса.</p> <p align="justify">Если эти строки вы читаете, борясь с желанием закрыть окно браузера оттого, что далеко не уверены, будет ли сказано далее что-то для вас новое [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Ниже пойдет речь исключительно об OllyDbg и плагинах к ней, но описанный подход и сами идеи при определенных навыках вы сможете использовать применительно и к другим утилитам такого класса.</p>
<p align="justify">Если эти строки вы читаете, борясь с желанием закрыть окно браузера оттого, что далеко не уверены, будет ли сказано далее что-то для вас новое и оригинальное, то ответьте для себя на следующие вопросы:</p>
<p align="justify">Как работает функция IsDebuggerPresent? Если ее не вызывать из kernel32, а реализовать ее функционал в своем коде, то получится ли обмануть анти-антиотладку? Как плагин скрывает процесс отладчика (чтобы его подопытная программа не завершила по имени или не прекратила свою работу)?</p>
<p align="justify">Если на эти вопросы вы с легкостью отвечаете и еще можете рассуждать на эту тему и рассказать в каком плагине что да как, то статья вряд ли откроет вам на что-то глаза или сможет показать хоть что-то новое, но если прочитать все же хочется или вопросы несколько озадачили, то рекомендую к прочтению.</p>
<p><span id="more-543"></span></p>
<p align="justify">Сам процесс антиотладки и противодействия оной, достаточно автоматизирован &#8212; существует приличное количество навесных защит на файлы и специальных анти-антиотладочных плагинов к дебаггерам.</p>
<p align="justify">На этот раз пойдет речь о способах обнаружения факта отладки путем выявления и анализа изменений, вносимых плагинами отладчика в исследуемый процесс и систему. Плагины скрывают присутствие отладчика в системе, но скрывают ли они себя самих? Не вызывают ли они каких-то аномалий? При поиске ответов на эти вопросы из под пера (точнее клавиатуры) вышла  данная рукопись.</p>
<p align="justify">На тему противодействия отладке написано немало статей, как хороших, так и &#171;ни о чем&#187;. У меня нет ни малейшего желания изобретать колесо и разжевывать то, что было с успехом сделано и до меня, поэтому если что-то в статье вам покажется непонятным, то запрос &#171;антиотладка&#187; в яндекс/гугл, думаю, все расставит по своим местам.</p>
<p align="justify">Все антиотладочные приемы условно можно разделить на две группы:</p>
<ul>
<li>Усложнение возможной отладки. Сюда можно отнести обфускацию кода, паковку/криптовку, использование исключений, разделение кода на потоки/библиотеки, мусорные функции и т.д.</li>
<li>Обнаружение отладки. Название говорит само за себя &#8212; так или иначе происходит обнаружение самого факта исследования: через созданные для этого функции или через нахождения окна/процесса отладчика, нахождение брекпоинтов (CC, проверка атрибутов доступа и др.), замеры времени и т.д.</li>
</ul>
<p align="justify">Как, наверное, уже понял читатель, наш метод относится ко второй группе. Использовать полученное знание можно по-разному. Про это писалось много, но вкратце сказать об этом все же необходимо: обнаружив отладчик, конечно, можно сразу радостно выкинуть алерт типа &#171;debugger detected&#187; и завершить работу, а можно затаиться и потихонечку портить жизнь взломщику &#8212; сбить значения пары переменных, изменить логику работы программы, использовать флаги обнаружения отладчика как слагаемые при вычислении относительного адреса и т.д. Совершенно очевидно, что второй способ способен очень сильно затруднить жизнь исследователю, но все эти возможности оставляю вашей фантазии с базированием на других статья на эту тему, я же только постараюсь показать новые методы обнаружения отладки, а как вы это будете применять далее уже не мое дело.
</p>
<p align="justify">Ниже будут рассмотрены способы защиты от некоторых антиотладочных приемов следующими популярными плагинами для OllyDbg:</p>
<ul>
<li>Olly Advanced 1.26 Beta 12</li>
<li>Hide Debugger v1.2.4 (by Asterix)</li>
<li>HideOD v0.12 (pеdiy.соm)</li>
</ul>
<h5>ZwQueryInformationProcess (InfoClass = 7)</h5>
<p align="justify">Olly Advanced модифицирует данную функцию так, что после ее отработки она сама же зануляет четырехбайтовый буфер и вместо законных FFFFFFFF там будет абсолютный ноль.
</p>
<p align="justify">HideOD работает более жестко. Функцию он модифицирует так, что она, по сути, и не работает (вызова в ядро не происходит). При этом значение регистра есх остается преждним, хотя нормальная функция его бы изменила, значение edx также остается постоянным или меняется на 00320000 (в зависимости от выбора метода в настройках).
</p>
<p align="justify">А в Hide Debugger такой функционал не заложен.</p>
<h5>GetTickCount</h5>
<p align="justify">Защиту от этого метода предлагает только Olly Advanced, причем двумя методами. При выборе первого варианта защиты, происходит просто обнуление возвращаемого значения (при любых обстоятельствах данная функция вернет 0), а второй возвращает небольшое значени и при повторных вызовах функции прибавляет к счетчику единицу. Реализованы они по принципу &#171;перехвати себя сам&#187; &#8212; код функции изменяется так, что как надо она не работает. В любом случае значения счетчиков выходят до безобразия маленькие, чем можно воспользоваться. Вот самый простой пример:
</p>

<div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #00007f; font-weight: bold;">call</span> GetTickCount
<span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #00007f;">eax</span>
<span style="color: #000000; font-weight: bold;">invoke</span> Sleep<span style="color: #339933;">,</span> 1000d <span style="color: #666666; font-style: italic;">; 3e8h</span>
<span style="color: #00007f; font-weight: bold;">call</span> GetTickCount
<span style="color: #00007f; font-weight: bold;">pop</span> <span style="color: #00007f;">ecx</span>
<span style="color: #00007f; font-weight: bold;">sub</span> <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span> <span style="color: #00007f;">ecx</span></pre></div></div>

<p align="justify">В итоге если в eax ноль или единица, а не законный минимум 3E8, то значит, поработал плагин&#8230;<br />
Данная функция состоит из четырех строк и не делает каких-либо глубинных вызовов по относительным адресам, поэтому никаких сложностей собственной ее реализации быть не должно:</p>

<div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #00007f; font-weight: bold;">MOV</span> <span style="color: #00007f;">EDX</span><span style="color: #339933;">,</span>7FFE0000
<span style="color: #00007f; font-weight: bold;">MOV</span> <span style="color: #00007f;">EAX</span><span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #000000; font-weight: bold;">DWORD</span> <span style="color: #00007f;">DS</span><span style="color: #339933;">:</span><span style="color: #00007f;">EDX</span><span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #00007f; font-weight: bold;">MUL</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #000000; font-weight: bold;">DWORD</span> <span style="color: #00007f;">DS</span><span style="color: #339933;">:</span><span style="color: #00007f;">EDX</span><span style="color: #339933;">+</span><span style="color: #0000ff;">4</span><span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #00007f; font-weight: bold;">SHRD</span> <span style="color: #00007f;">EAX</span><span style="color: #339933;">,</span><span style="color: #00007f;">EDX</span><span style="color: #339933;">,</span><span style="color: #0000ff;">18</span>
<span style="color: #00007f; font-weight: bold;">PUSH</span> <span style="color: #00007f;">EAX</span>
<span style="color: #00007f; font-weight: bold;">PUSH</span> <span style="color: #0000ff;">3E8</span>                    <span style="color: #666666; font-style: italic;">; Timeout = 1000. ms</span>
<span style="color: #00007f; font-weight: bold;">CALL</span>   <span style="color: #666666; font-style: italic;">; Sleep</span>
<span style="color: #00007f; font-weight: bold;">MOV</span> <span style="color: #00007f;">EDX</span><span style="color: #339933;">,</span>7FFE0000
<span style="color: #00007f; font-weight: bold;">MOV</span> <span style="color: #00007f;">EAX</span><span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #000000; font-weight: bold;">DWORD</span> <span style="color: #00007f;">DS</span><span style="color: #339933;">:</span><span style="color: #00007f;">EDX</span><span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #00007f; font-weight: bold;">MUL</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #000000; font-weight: bold;">DWORD</span> <span style="color: #00007f;">DS</span><span style="color: #339933;">:</span><span style="color: #00007f;">EDX</span><span style="color: #339933;">+</span><span style="color: #0000ff;">4</span><span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #00007f; font-weight: bold;">SHRD</span> <span style="color: #00007f;">EAX</span><span style="color: #339933;">,</span><span style="color: #00007f;">EDX</span><span style="color: #339933;">,</span><span style="color: #0000ff;">18</span>
<span style="color: #00007f; font-weight: bold;">POP</span> <span style="color: #00007f;">ECX</span>
<span style="color: #00007f; font-weight: bold;">SUB</span> <span style="color: #00007f;">EAX</span><span style="color: #339933;">,</span><span style="color: #00007f;">ECX</span></pre></div></div>

<p align="justify">Чтобы не бросаться в глаза можно обойтись и без Sleep&#8217;a, просто проверить один раз использовать код GetTickCount и проверить еах на близость к нулю, и если на данном участке программы такое небольшое значение невозможно, то значит плагин детектед&#8230; </p>
<h5>Process32Next</h5>
<p align="justify">Теперь рассмотрим что за жуткую зиродей руткит-технологию используют плагины для сокрытия процесса ollydbg от подопытной программы.<br />
Olly Advanced в этом плане решил не заморачиваться и просто обнуляет еах в функции Process32NextW, на чем, собственно, все листание процессов и заканчивается: Process32First отрабатывает как положено, а процессов next оказывается в системе не существует, ну, на нет и суда нет, видимо юзер так оптимизировал систему убрав ненужные процессы ;)
</p>
<p align="justify">Кстати, помимо того, что в реальной системе процессов чуть побольше чем один, так и при завершении листания всех процессов, Process32Next помимо выдачи нуля в eax еще и LastError, установленный в ERROR_NO_MORE_FILES, обеспечит&#8230;
</p>
<p align="justify">HideOD работает точно также и обсуждать его посему незачем. </p>
<p align="justify">В Hide Debugger такой функционал не замечен, конечно, может там названо это иначе, например защитой от убийства процесса (галочка напротив TerminateProcess), но какого-либо результата от установки этой защиты добиться не удалось, подопытной утилите ничто не помешало пролистать процессы, найти процесс олли и благополучно его прибить, после этого у меня пропало всякое желание исследовать, почему так происходит в этом плагине. К слову сказать, защита от TerminateProcess в Olly Advanced работает как топор &#8212; просто и надежно: в самое начало функции поставлен ret. </p>
<p><br /><br /></p>
<p align="justify">Теперь, после знакомства с некоторыми принципами работы анти-антиотладочных плагинов можно перейти к выводам. Некоторые из них уже были вкратце озвучены выше, а до каких-то нужно еще дойти посредством мыслительной деятельности &#8212; размышляя какие слабости у таких методов реализации защиты отладчика от агрессивно настроенных программ:
</p>
<p align="justify">
<ul>
<li>Поиск аномалий
<ul>
<li>Различия в изменениях регистров. Исследовав работу чистой функции и с плагином можно выявить различия.</li>
<li>Используя функцию GetLastError (или самостоятельно находя значение в блоке окружения) после антиотладочных функций (выше есть пример) проверить правильность ее работы. Если функция в случае неудачи возвращает 0 и msdn советует вызывать GetLastError, которая клянется, что все ОК, то это повод задуматься&#8230;</li>
<li>Можно обнаружить сплайсинг путем поиска опкода jmp в первых байтах функции. Вызвав GetProcAddress, можно не только использовать его для вызова, но и незаметно сохранить первые его байты, а потом в спокойной остановке исследовать.</li>
<li>Правдоподобность. Один процесс в системе это похоже на истину? Нет. Вот и ответ.</li>
</ul>
</li>
<li>Рыба ищет, где глубже&#8230;
<ul>
<li>Использовать NativeAPI. Конечно, в некоторых случаях перехвачены и они, но ведь это общая рекомендация и из примеров выше видно на каком уровне что изменяется.</li>
<li>sysenter. В этом случае за собой придется таскать массив номеров системных вызовов, т.к от системы к системе они меняются.</li>
<li>Серединный вызов api-функций. На самом деле это не так сложно как кажется и таскать за собой километры кода функций не требуется, достаточно вызывать с $+5, т.к зачастую именно в первых пяти байтах содержится jmp, тем более не стоит забывать о распространенном пятибайтовом прологе.</li>
</ul>
</li>
<li>Ищем плагин. Если сам отладчик может быть замаскирован как бревно в собственном глазу (т. е найти почти нереально), то плагин может и не скрываться совсем. Например, CommandBar светится классом окна ComboLBox.</li>
</ul>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2011-06-02%2F543&amp;title=%D0%A1%D0%B2%D0%B5%D0%B6%D0%B8%D0%B9%20%D0%B2%D0%B7%D0%B3%D0%BB%D1%8F%D0%B4%20%D0%BD%D0%B0%20%D0%B0%D0%BD%D1%82%D0%B8%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D1%83" id="wpa2a_10"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2011-06-02/543/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ring-3 руткиты</title>
		<link>http://sww-it.ru/2011-04-21/528?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ring-3-%25d1%2580%25d1%2583%25d1%2582%25d0%25ba%25d0%25b8%25d1%2582%25d1%258b</link>
		<comments>http://sww-it.ru/2011-04-21/528#comments</comments>
		<pubDate>Thu, 21 Apr 2011 09:04:30 +0000</pubDate>
		<dc:creator>priv8v</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[anti-rootkit]]></category>
		<category><![CDATA[ring-3]]></category>
		<category><![CDATA[rootkit]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=528</guid>
		<description><![CDATA[<p>Публикую статью автора priv8v. Мнение редакции может не совпадать с мнением автора и т.д. и т.п.</p> <p align="justify">Казалось бы, что о user-mode руткитах уже все давно сказано, и добавить тут нечего. С распространением зловредных драйверов все внимание антивирусных специалистов и хакеров переключилось туда, поэтому ring-3, по крайней мере, на три года остался практически без внимания&#8230; [...]]]></description>
			<content:encoded><![CDATA[<p><em>Публикую статью автора priv8v. Мнение редакции может не совпадать с мнением автора и т.д. и т.п.</em></p>
<p align="justify">Казалось бы, что о user-mode руткитах уже все давно сказано, и добавить тут нечего. С распространением зловредных драйверов все внимание антивирусных специалистов и хакеров переключилось туда, поэтому ring-3, по крайней мере, на три года остался практически без внимания&#8230; А зря. Появились новые технологии, новые методы защиты и нападения. Если задуматься, то изменились даже некоторые цели у конкретных технологий, поменялось поведение зловредов на компьютере, изменился и их внешний облик &#8212; теперь некоторые из них имеют красивые кнопочки и &#171;ищут вирусы&#187;. На этой ноте стоит прекратить ностальгировать и приступить непосредственно к изложению темы.</p>
<p><span id="more-528"></span></p>
<p align="justify">Открыв любую статью пятилетней давности про руткиты можно прочитать о том, что использование rootkit-технологий имеет перед собой две цели: скрытие вредоноса на ПК и усложнение его удаления (второе является следствием первого). На сегодняшний день эта информация неактуальна: удалить библиотеку/ехе-файл с диска (при условии его сигнатурного детектирования) для нормального антивируса не является проблемой, а найти его&#8230; собственно, его искать и не требуется, при работе с уровня ядра антивирус даже не будет и подозревать, что это скрытые файлы. В таком случае можно задаться вопросами:</p>
<ul>
<li>зачем применять сегодня user-mode руткиты?</li>
<li>целесообразно ли это?</li>
<li>а они часом не вымерли?</li>
</ul>
<p align="justify">Применять их можно для скрытия чего-либо на компьютере пользователя и при отсутствии сигнатурного детекта со стороны антивируса, есть возможность оставаться незамеченным сколь угодно долгое время, даже если пользователь является продвинутым и знает что такое антируткит – о том, как этого добиться далее и пойдет речь.</p>
<p align="justify">Для начала необходимо кое о чем договориться и сделать некоторые допущения:</p>
<ul>
<li>в статье не будет рассмотрен обход эмуляторов и поведенческих анализаторов;</li>
<li>обход антивирусного эвристического/сигнатурного детекта также не рассматривается;</li>
<li>основное внимание будет уделено сплайсингу;</li>
<li>в статье будет использована анти-script-киддис защита;</li>
<li>панды бамбук не курят, они им питаются;</li>
</ul>
<p align="justify">При разговоре о руткитах просто нельзя ничего не сказать о драйверах, тем более, когда не планируешь уделить им даже строки. Создание и использование Kernel-mode руткита сопряжено с определенными трудностями, из-за которых они не смогли полностью вытеснить с рынка собратьев на два кольца выше:</p>
<p><br /></p>
<p><strong>
<p align="justify">Сложность написания</p>
<p></strong></p>
<p align="justify">Конечно, можно воспользоваться готовыми исходными кодами из интернета/книг/статей, но на них, скорее всего, будет детект всеми возможными способами (начиная от сигнатурного) и подобный руткит будет расстреливаться из главных орудий еще на подлете, поэтому готовые исходные коды или модифицируются, или заново переписываются, что в любом случае сложнее этих же манипуляций с сорцами пользовательского режима.</p>
<p><br /></p>
<p><strong>
<p align="justify">Обход HIPS</p>
<p></strong></p>
<p align="justify">Каждая вторая антивирусная компания под &#171;HIPS&#187; понимает что-то свое (несмотря на то, что расшифровка аббревиатуры у всех одинаковая). У кого-то вообще этой технологии нет, у кого-то есть только галочка в настройках (типа &#171;Да, по умолчанию использовать эту супер-HIPS&#187;), но у многих эта технология присутствует и включает в себя анализ поведения и эмуляцию кода. Говоря простым языком, могут быть проблемы с установкой драйвера, т.к некоторые комбайны спрашивают совета у пользователя даже если драйвер пытается ставить доверенное приложение. Если вы не найдете какого-нибудь неведомого способа установки драйвера, то ядра вам не видать как своих ушей (и зеркало при проникновении в ring-0 не поможет). Хотя в последнее время и наблюдается некий мнимый упадок технологий в этой области, связанный с прогибом антивирусов под знания среднего юзера.</p>
<p><br /></p>
<p><strong>
<p align="justify">&#171;Бельмо на глазу&#187;</p>
<p></strong></p>
<p align="justify">Если вы будете использовать какие-то давно известные и проверенные rootkit-технологии, то обязательно будете обнаружены даже простеньким антируткитом (например, пандой). Поэтому без чего-то нового наедятся скрыться от Gmer&#8217;a, или AVZ с его километровым логом, просто бессмысленно.</p>
<p><br /></p>
<p><strong>
<p align="justify">Права на установку драйвера</p>
<p></strong></p>
<p align="justify">Для установки драйвера должны быть соответствующие права в системе, при их отсутствии, конечно, можно попытаться воспользоваться эксплоитом для повышения прав, но это создает дополнительные трудности.</p>
<p><br /></p>
<p><strong>
<p align="justify">Различия систем</p>
<p></strong></p>
<p align="justify">Прежде всего, это связано с увеличением популярности Windows 7 и х64-систем.</p>
<p align="justify">Современные антируткиты можно условно разделить на две категории:</p>
<ul>
<li>Рассчитанные на продвинутых пользователей. Это целые комбайны для убийства и извращений. Они показывают перехваты с подробной информацией о них, позволяют их снимать, могут работать с реестром, файловой системой, причем сами делают их разбор. В качестве примера можно привести Gmer или XueTr.</li>
<li>Рассчитанные на User Classic  &#8212; как правило, имеют пять кнопок, включая &#171;выход&#187; и &#171;справка&#187;, еще две это &#171;найти&#187; и &#171;уничтожить&#187;, а пятая кнопка не всегда и имеется. Подобные утилиты ничего не показывают пользователю, просто ищут скрытые на их взгляд файлы/ключи/процессы и предлагают их прибить. Образчиком этой категории может быть антируткит от Panda.</li>
</ul>
<p align="justify">Пару слов необходимо сказать пару общих слов о том, какой антируткит, где ищет и что отображает пользователю: Rootkit Unhooker и Gmer просматривают на предмет хуков все процессы в системе и ищут перехваты во всех функциях (хотя могли бы проверять только критичные) – находят даже перехват MessageBox’a. Идентифицируют тип перехвата достаточно четко (&#8230;Jump, PushRet и т.д) и указывают полный путь до библиотеки с кодом перехватчика. С помощью XueTr можно получить аналогичную информацию, только метод перехвата будет описан не столь подробно (inline, и все тут&#8230;).</p>
<p align="justify">Но анализировать перехваты в ring-3 умеют не все антируткиты (зачем руки-то марать?), к примеру, Vba32 AntiRootKit является одним из лучших на сегодняшний день антируткитов и находит хитрые заковырки в ядре, но в ring3 не видит ничего. Аналогично и DwShark.</p>
<p><br /></p>
<p align="justify">Для начала зададимся вопросом о том, как скрыть или замаскировать перехваты от тех немногих программ, которые их все-таки показывают, и рассмотрим несколько способов:</p>
<p align="justify"><strong>1)</strong> Антируткит, как правило, не может распознать какой перехват «хороший», а какой нет. Под «хорошим» имеется в виду перехват, установленный каким-либо вполне законным приложением (например, антивирус). И весь груз ответственности за вынесения вердикта свой/чужой остается на долю пользователя, который это делает либо сам, либо с помощью коллективного разума на форуме. Именно поэтому имеет право на жизнь такой глупый способ маскировки как расположение внедренной dll по похожему на лигитимный пути, а не в папку темп или в system32 с рандомным названием. Чем плохо: C:\Program Files\Agnitum\нормальное_имя.dll – подсмотреть пути, подсмотреть названия и все. При этом к библиотеке можно даже через редактор ресурсов прилепить описание и в отчете антируткита будет видно именно оно.</p>
<p align="justify"><strong>2)</strong> Перехват можно сделать целевым – в определенном процессе/процессах. Или наоборот – внедряться во все процессы, кроме строго определенных. Благодаря этому про какие-то скрытые объекты антируткит не будет и знать – если в его приложение-дразнилку ничего не внедрено и не перехвачено, то и отличий от того, что спущено свыше (с уровня ядра, хотя правильнее будет сказать «сниже», но такого слова нет) с уровня ядра не будет, то есть в системе все будет видно со всех уровней, а раз ничего антируткит не нашел скрытого, то и панику поднимать не будет. Естественно, не защита от всех антируткитов, Gmer’а этим не смутить.</p>
<p align="justify"><strong>3)</strong> На всех компьютерах с защитным ПО обязательно будут какие-то перехваты, и практически всегда, хоть небольшая часть из них (для разных целей) зиждется на ring-3 перехватчике. Поэтому будет просто некультурно не воспользоваться этим. Идея в маскировке наших перехватов под перехваты библиотеки антивируса, а там попробуй, разберись какие функции и зачем какой антивирус перехватывает. Поэтому свой jmp мы будем ставить не на свою библиотеку, а на хорошую библиотеку ав-продукта, а уже в ней будет стоять jmp на код в нашей библиотеке.</p>
<p>Перехватываемая API-функция: jmp good_library.address<br /><br />
good_library.address: jmp our_evil_library.address<br /></p>
<p align="justify"> В антирутките данный перехват будет выглядеть как родной для этого антивируса, и обнаружить подвох можно будет только при детальном изучении вручную с отладчиком в руках. Такой изврат не раскусывает ни один антируткит.</p>
<p align="justify"><strong>4)</strong> Насколько много приложений работает с системой не прямыми вызовами API-функций, а, используя функции языка программирования, на котором они написаны? Много. Вызов API-функции несомненно будет, но не сразу, поэтому и перехват можно делать в этой самой надстройке. Наиболее наглядный пример можно привести из языка С: при перехвате функции printf в библиотеке msvcrt.dll перехват не углядел ни Gmer, ни Rootkit Unhooker, при этом XueTr гордо опознал перехват и даже имя перехваченной функции. Надеюсь, что данная мысль понятна без дальнейших примеров с другими языками.</p>
<p align="justify"><strong>5)</strong> Для лучшего понимания следующего способа сокрытия перехватов необходимо рассмотреть то, как их обнаруживают.</p>
<p align="justify">Антируткит делает допущение, что лежащая на диске в system32 библиотека оригинальна, а так как все модификации ее функций находятся исключительно в памяти процессов, то механизм работы в упрощенном виде выглядит так: прочитать библиотеку с диска, принять ее за эталон чистоты и, перебирая процессы сравнивать код библиотеки в адресном пространстве с эталоном и при обнаружении отличий пытаться опознать в них метод перехвата, адрес куда ведет перехват и приложение, в которое перехват привел, таким образом антируткит покажет расхождение между оригиналом и тем, что в памяти (перехват) и куда совершается прыжок (перехватчик).
</p>
<p align="justify">Как вы уже догадались, вектор атаки будет направлен как раз на сделанное допущение:</p>
<ul>
<li>Библиотека патчится не только в памяти, но и на диске (предварительно скопированная).</li>
<li>После отключения WFP оригинал заменяется патченной. В зависимости от того, как будет реализовано отключение WFP и как выполнен перехват (в скольких процессах, как сделана обработка и т.д) библиотека заменяется на патченную или только на время работы антируткита, или на относительно вечно (здесь можно послать привет установке глобальных перехватов в user-mode).</li>
</ul>
<p align="justify"><strong>6)</strong> Если jmp отодвинуть от начала функции, к примеру, байт на 30, то Gmer все равно будет видеть перехват и правильно его отображать. Rootkit Unhooker перехват также будет видеть, но имя функции не отображает (будет показывать dll_name.dll+xxx).<br />
Следует помнить, что Gmer ругается даже при изменении одного байта в функции.</p>
<p align="justify"><strong>7)</strong> Замаскировать перехватчик. Если адрес нашего обработчика на начале функции класть в стек, а потом выполнять ret или просто поставить на него jmp, то не стоит удивляться, если антируткит покажет, куда ведет перехват, но если адрес немного обработать (прибавить, отнять, поболтать по регистрам), то это даст результат – перехватчик не будет определен.</p>
<p align="justify">Выше были рассмотрено пассивное противодействие антируткитам, но известно, что лучшая защита это нападение&#8230;</p>
<p align="justify">Философия примерно такая: в зависимости от способа противодействия собирается информация о популярных антируткитах (имена исполняемых файлов/библиотек/драйверов, классы/имена окон и т.д), затем пишется функция обнаружения руткит-детекторов в системе и разработка методов борьбы с ними. </p>
<p align="justify">При грубой реализации эти методы направлены не на скрытие себя в системе, а на противодействие удалению, т.е пользователь будет знать, что какая-то зловредная живность на ПК имеется и она мешает работе лечащих утилит, при более тонком исполнении пользователь или не заметит ничего подозрительного или спишет на &#171;глюки&#187;.</p>
<p align="justify">Рассмотрим пару приемов этого противостояния.</p>
<p><br /></p>
<p align="justify"><strong>Блокировка запуска и работы</strong></p>
<p align="justify">Этот метод достаточно популярен и путей его реализации также достаточно много, поэтому большинство антируткитов (наученные горьким опытом) как могут пассивно этому мешают. Суть: найти файл и не дать ему работать, а сделать это можно через запись в соответствующий ключ реестра имени исполняемого файла, модифицировать (побить) файл на диске, удалить нужную библиотеку/драйвер, установить в системе перехваты на запуск процессов/загрузку библиотек и сравнивать имена&#8230; </p>
<p align="justify">В ответ на это разработчики утилит используют рандомные имена файлов и пути их инсталляции, сведение к минимуму файлов вне основного исполняемого (т.е все нужные библиотеки/драйвера зашиты внутрь), рандомные имена драйверов и ключей реестра.</p>
<p align="justify">Так что все достаточно интересно.</p>
<p><br /></p>
<p align="justify"><strong>Прекращение работы</strong></p>
<p align="justify">Как правило, все достаточно банально &#8212; процесс находится и завершается. Процесс поиска процесса аналогичен предыдущему методу (нахождение по характерным признакам). Это может хорошо продемонстрировать следующий исходный код, на котором можно еще пояснить и некоторые аспекты грубого/тонкого противодействия.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">int</span> HideXueTr <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// флаг было ли уже скрыто окно или нет</span>
  <span style="color: #666666; font-style: italic;">// ..... code.... </span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>HideXueTr<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  HWND XueTr <span style="color: #339933;">=</span> FindWindow <span style="color: #009900;">&#40;</span>NULL<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;XuеTr 0.39&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>XueTr<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                  MessаgeBox <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;XueTr найден и будет скрыт!&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;OK&quot;</span><span style="color: #339933;">,</span> MB_OK<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                  ShоwWindow <span style="color: #009900;">&#40;</span>XueTr<span style="color: #339933;">,</span> SW_HIDE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// скрываем окно</span>
                  HideXueTr <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// взводим флаг</span>
               <span style="color: #009900;">&#125;</span>
      <span style="color: #009900;">&#125;</span></pre></div></div>

<p align="justify">В данном примере показана блокировка уже активного XueTr: находится по имени главного окна, после чего окно скрывается, причем только один раз. Пропажа окна будет воспринята пользователем как &#171;глюк&#187;, и XueTr будет запущен повторно, при этом он больше скрываться не будет в виду того, что никакие перехваты он показать уже не сможет, все данные поступают в скрытое окно, а в новом можно будет только обозреть сервисы и файловую систему. Антируткит работает, но показывает &#171;местами&#187;, что будет воспринято пользователем как несовместимость с его ОС, глюками, неумением работать с этой программой и т.д, но никаких подозрений у него не возникнет.</p>
<p><br /></p>
<p align="justify">При глюках обычно тянет на философию, чем и предлагаю заняться. Поразмышляем…</p>
<p align="justify">В логике работы всех антируткитов присутствует следующая аксиома: если скрытый &#8212; значит руткит. Соответственно найденный скрытый объект выделяется всеми цветами радуги (в данном случае для меня все цвета это красный) и уведомляет пользователя о том, что руткит найден. Далее в работе антируткитов имеется небольшая, но существенная разница, о которой мы уже говорили выше, а именно подробность отчета. Те утилиты, которые дают подробный отчет, покажут все что смогут (перехваты, перехватчик) и сам скрытый объект выделят, а те, что попроще в общении с пользователем просто покажут руткит и на выбор предложат: &#171;Удавить его? Утопить его? Стереть в порошок?&#187;. В целом, подход, конечно, правильный, но при большом желании и везении можно использовать его слабое место, ведь не все то золото, что блестит &#8212; не все то руткит, что скрывается, тем более в данном случае между словами &#171;скрывается&#187; и &#171;скрыт&#187; нет никакой разницы. По сути, руткиту (назовем так код, который что-то скрывает) нет никакой разницы, что скрывать &#8212; что ему сказали прятать, то он и прячет. Скажут скрывать readme.txt, и будет это делать. К чему это? А все к тому&#8230; В расчете на применение антируткита или при нахождении его активности (например, процесса) в системе, можно скрыть что-то специально для него. Возьмем и легким движением руки сделаем процесс/файл антивируса злостным руткитом, причем сам антивирус будет сильно удивлен, если вдруг прознает это, а вот антируткит будет этому только рад. Раз руткит &#8212; приговор &#171;Расстрел!&#187;. Особым цинизмом будет скрытие процесса/файла самого антируткита от него же. McAfee Rootkit Detective при обнаружении скрытого процесса предлагает только два способа борьбы с ним &#8212; завершить или переименовать. При скрытии его самого, прекрасно себя переименовывает. Панда также не ожидает, что ему подложат такую свинью и предлагает два варианта: удалять руткит и не удалять руткит. При выборе первого варианта мишка с успехом самовыпиливается: после перезагрузки бамбуковый мишка начинает использовать бамбук по назначению.</p>
<p><br /></p>
<p align="justify">Напоследок мне бы хотелось напомнить о том, что файл от юзера можно спрятать и в ADS – даже если антируткит их показывает, то покажет он их очень много, вот среди этого множества можно и затесаться. Атаку на GUI антируткитов также никто не отменял, взяли и как нужно отредактировали данные в его окошке, или не допустили их туда, аналогично и с диспетчером задач.</p>
<p align="justify">Закончить статью хотелось бы пожеланиями разработчикам антируткитов:</p>
<p align="justify"><strong>1)</strong> Еще больше рандомизировать (а тем, у кого этого нет &#8212; сделать) имена файлов/путей/окон/размера/и т.д.</p>
<p align="justify"><strong>2)</strong> Сделать более читабельной информацию об установленном перехвате:</p>
<ul>
<li>улучшить распознавание имен функций;</li>
<li>информацию о перехвате выводить не только набором байт, но и мнемоникой вида jmp xxx, а при невозможности определить четко перехватчик, выводить мнемоникой весь код установленного перехвата, например:</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #00007f; font-weight: bold;">xor</span> <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span> <span style="color: #00007f;">eax</span>
<span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span> xxx
<span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #00007f;">eax</span>
<span style="color: #00007f; font-weight: bold;">ret</span></pre></div></div>

<p align="justify"><strong>3)</strong> Выполнять сравнение библиотек в system32 и в dllcache. Для повышения точности определения чистоты библиотеки можно носить с собой в массиве т.н базу чистых &#8212; хэш суммы проверяемых библиотек с разных систем (хотя бы популярных). Размер базы будет следующим: количество_проверяемых_в_системе_библиотек * количество_популярных_систем.</p>
<p align="justify"><strong>4)</strong> Выполнять поиск перехватов не только в своем процессе/некоторых, а во всех.</p>
<p align="justify"><strong>5)</strong> Научиться (тем, кто не умеет) опознавать перехваты, установленные антивирусными программами. Тут, собственно, три основных пути:</p>
<ul>
<li>иметь на борту базу чистых;</li>
<li>проверять подписи (хотя в свете последних событий тут следует быть осторожным);</li>
<li>подгружать базу чистых из &#171;облака&#187;;</li>
</ul>
<p align="justify"><strong>6)</strong> Для получения слепка файлов/процессов/ключей из user-mode для последующего сравнения со списком из ядра, пользоваться не консольной программой, а чем-то имитирующим обычную программу &#8212; нужно хотя бы user32.dll подгружать&#8230;</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2011-04-21%2F528&amp;title=Ring-3%20%D1%80%D1%83%D1%82%D0%BA%D0%B8%D1%82%D1%8B" id="wpa2a_12"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2011-04-21/528/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>IsDebug-ли?</title>
		<link>http://sww-it.ru/2011-03-21/520?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=isdebug-%25d0%25bb%25d0%25b8</link>
		<comments>http://sww-it.ru/2011-03-21/520#comments</comments>
		<pubDate>Mon, 21 Mar 2011 17:10:02 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Вирусный анализ]]></category>
		<category><![CDATA[rootkit]]></category>
		<category><![CDATA[драйвер]]></category>
		<category><![CDATA[юмор]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=520</guid>
		<description><![CDATA[<p align="justify">Пришлось мне тут анализировать один элементарный руткит, никак не срасталось у нашего анти-руткита кое-что с ним. Ерунда в принципе, бага не критичная, но разобраться все-таки стоило. В последнее время не часто выпадает возможность проанализировать что-либо, но тут повезло, можно немного отвлечься от процесса исследования/кодинга. </p> <p></p> <p align="justify">Для дальнейшего понимания сути поста надо запомнить [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Пришлось мне тут анализировать один элементарный руткит, никак не срасталось у нашего анти-руткита кое-что с ним. Ерунда в принципе, бага не критичная, но разобраться все-таки стоило. В последнее время не часто выпадает возможность проанализировать что-либо, но тут повезло, можно немного отвлечься от процесса исследования/кодинга.
</p>
<p><span id="more-520"></span></p>
<p align="justify">Для дальнейшего понимания сути поста надо запомнить то, что дата компиляции дроппера &#8212; <strong>27 февраля 2011 года</strong>, т.е. сэмпл далеко не старый.</p>
<p align="justify">В процессе <strong>динамического анализа</strong> я натолкнулся на полнейший отказ руткита работать, во-первых, под виртуальной машиной, а во-вторых, под виртуальной машиной с отладчиком ядра. Дроппер, кстати, также использовал парочку элементарных и устаревших проверок виртуальной машины, но не о дроппере речь.</p>
<p>Вот такой код я обнаружил в драйвере:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">char</span> __cdecl IsDebug<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  UNICODE_STRING DestinationString<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// [sp+4h] [bp-Ch]@4</span>
  PVOID Object<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// [sp+Ch] [bp-4h]@4</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> KdDebuggerEnabledAddr <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span>_BYTE <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>KdDebuggerEnabledAddr <span style="color: #009900;">&#41;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  RtlInitUnicodeString<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>DestinationString<span style="color: #339933;">,</span> L<span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>Driver<span style="color: #000099; font-weight: bold;">\\</span>NTICE&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>ObReferenceObjectByName<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>DestinationString<span style="color: #339933;">,</span> 0x40u<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> 0x1F01FFu<span style="color: #339933;">,</span> IoDriverObjectType<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>Object<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    ObfDereferenceObject<span style="color: #009900;">&#40;</span>Object<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p align="justify">Способ, основанный на проверке переменной <strong>KdDebuggerEnabled</strong>, известен очень давно, однако, проверка на наличие в системе активного отладчика Soft(Win)Ice (наличие драйвера NTICE) &#8212; это что-то из ряда вон выходящее. Неужели авторы думают, что антивирусные лаборатории до сих пор используют этот устаревший инструмент?</p>
<p align="justify">Что ж, живы еще олдскул разработчики в родных селениях!</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2011-03-21%2F520&amp;title=IsDebug-%D0%BB%D0%B8%3F" id="wpa2a_14"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2011-03-21/520/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>University of Tokyo Windows Internals Lectures by Microsoft</title>
		<link>http://sww-it.ru/2011-01-29/516?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=university-of-tokyo-windows-internals-lectures-by-microsoft</link>
		<comments>http://sww-it.ru/2011-01-29/516#comments</comments>
		<pubDate>Sat, 29 Jan 2011 13:11:34 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Внутренности Windows]]></category>
		<category><![CDATA[internals]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=516</guid>
		<description><![CDATA[<p>Презентации компании Microsoft можно скачать прямо тут, может пригодятся кому-либо (PDF/PPT).</p> WindowsKernelOverview (308) WindowsKernelOverview (233) ObjectManager (179) ObjectManager (220) VirtualMemory (192) VirtualMemory (228) ThreadScheduling (298) ThreadScheduling (1633) Synchronization (226) Synchronization (322) TrapsInterruptsExceptions (268) TrapsInterruptsExceptions (305) IOArchitecture (262) IOArchitecture (313) NTFS (301) NTFS (274) Registry (1662) Registry (789) LPC (224) LPC (231) WindowsServices (176) WindowsServices (191) Processes (184)
Processes (171)
AdvVirtualMemory (190)
AdvVirtualMemory (201)
CacheManager (173)
CacheManager (212)
UserModeHeapManager (160)
UserModeHeapManager (169)
Win32K (179)
Win32K (315)
CommonCodingErrors (180)
CommonCodingErrors (190)


<p>Оригинал</p>
<p>P.S. Спасибо vaber за предоставленную ссылку.</p>
]]></description>
			<content:encoded><![CDATA[<p>Презентации компании Microsoft можно скачать прямо тут, может пригодятся кому-либо (PDF/PPT).</p>
<ul class="dlm_download_list">
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=1" title=" downloaded 308 times" >WindowsKernelOverview (308)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=2" title=" downloaded 233 times" >WindowsKernelOverview (233)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=3" title=" downloaded 179 times" >ObjectManager (179)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=4" title=" downloaded 220 times" >ObjectManager (220)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=5" title=" downloaded 192 times" >VirtualMemory (192)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=6" title=" downloaded 228 times" >VirtualMemory (228)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=7" title=" downloaded 298 times" >ThreadScheduling (298)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=8" title=" downloaded 1633 times" >ThreadScheduling (1633)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=9" title=" downloaded 226 times" >Synchronization (226)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=10" title=" downloaded 322 times" >Synchronization (322)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=11" title=" downloaded 268 times" >TrapsInterruptsExceptions (268)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=12" title=" downloaded 305 times" >TrapsInterruptsExceptions (305)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=13" title=" downloaded 262 times" >IOArchitecture (262)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=14" title=" downloaded 313 times" >IOArchitecture (313)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=15" title=" downloaded 301 times" >NTFS (301)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=16" title=" downloaded 274 times" >NTFS (274)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=17" title=" downloaded 1662 times" >Registry (1662)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=18" title=" downloaded 789 times" >Registry (789)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=19" title=" downloaded 224 times" >LPC (224)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=20" title=" downloaded 231 times" >LPC (231)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=21" title=" downloaded 176 times" >WindowsServices (176)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=22" title=" downloaded 191 times" >WindowsServices (191)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=23" title=" downloaded 184 times" >Processes (184)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=24" title=" downloaded 171 times" >Processes (171)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=25" title=" downloaded 190 times" >AdvVirtualMemory (190)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=26" title=" downloaded 201 times" >AdvVirtualMemory (201)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=27" title=" downloaded 173 times" >CacheManager (173)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=28" title=" downloaded 212 times" >CacheManager (212)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=29" title=" downloaded 160 times" >UserModeHeapManager (160)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=30" title=" downloaded 169 times" >UserModeHeapManager (169)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=31" title=" downloaded 179 times" >Win32K (179)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=32" title=" downloaded 315 times" >Win32K (315)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=33" title=" downloaded 180 times" >CommonCodingErrors (180)</a></li>
<li><a class="downloadlink" href="http://sww-it.ru/wp-content/plugins/download-monitor/download.php?id=34" title=" downloaded 190 times" >CommonCodingErrors (190)</a></li>
</ul>

<p><a href="http://i-web.i.u-tokyo.ac.jp/edu/training/ss/lecture/new-documents/Lectures/">Оригинал</a></p>
<p>P.S. Спасибо vaber за предоставленную ссылку.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2011-01-29%2F516&amp;title=University%20of%20Tokyo%20Windows%20Internals%20Lectures%20by%20Microsoft" id="wpa2a_16"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2011-01-29/516/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The NT Insider: January/February Issue</title>
		<link>http://sww-it.ru/2011-01-14/514?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-nt-insider-januaryfebruary-issue</link>
		<comments>http://sww-it.ru/2011-01-14/514#comments</comments>
		<pubDate>Fri, 14 Jan 2011 09:35:00 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[the nt insider]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=514</guid>
		<description><![CDATA[<p>Доступен новый номер The NT Insider.</p> <p>Номер Новость</p> ]]></description>
			<content:encoded><![CDATA[<p>Доступен новый номер The NT Insider.</p>
<p><a href="http://insider.osr.com/2011/ntinsider_2011_01.pdf">Номер</a><br />
<a href="http://www.osronline.com/article.cfm?article=556">Новость</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2011-01-14%2F514&amp;title=The%20NT%20Insider%3A%20January%2FFebruary%20Issue" id="wpa2a_18"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2011-01-14/514/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Kernel-mode GS Cookies and 1 bit of entropy</title>
		<link>http://sww-it.ru/2011-01-12/511?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=windows-kernel-mode-gs-cookies-and-1-bit-of-entropy</link>
		<comments>http://sww-it.ru/2011-01-12/511#comments</comments>
		<pubDate>Wed, 12 Jan 2011 08:03:51 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Без перевода]]></category>
		<category><![CDATA[cookies]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[kernel mode]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=511</guid>
		<description><![CDATA[<p>Today, I would like to present the results of the research, performed by me and Gynvael Coldwind, during the last three or four weeks – an almost forty-page long article, entitled “Exploiting the otherwise non-exploitable: Windows Kernel-mode GS cookies subverted” (yes, that’s an obvious reference to the “Exploiting the otherwise non-exploitable on Windows” by Skywing [...]]]></description>
			<content:encoded><![CDATA[<p><em>Today, I would like to present the results of the research, performed by me and Gynvael Coldwind, during the last three or four weeks – an almost forty-page long article, entitled “Exploiting the otherwise non-exploitable: Windows Kernel-mode GS cookies subverted” (yes, that’s an obvious reference to the “Exploiting the otherwise non-exploitable on Windows” by Skywing and Skape, Uninformed 4). The paper aims to describe the current protection level of a specific stack protection found in a majority of Windows device drivers (both default and 3rd party) – the GS cookies, and cover the cookie generation weaknesses, found in the actual protection implementations on Windows XP, Windows Vista and Windows 7 (both 32-bit and 64-bit platforms).</em></p>
<p><a href="http://j00ru.vexillium.org/?p=690">Дальше</a></p>
<p>P.S. PDF доступен в конце оригинального блогпоста.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2011-01-12%2F511&amp;title=Windows%20Kernel-mode%20GS%20Cookies%20and%201%20bit%20of%20entropy" id="wpa2a_20"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2011-01-12/511/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

