ESCalator
3.99K subscribers
228 photos
1 video
1 file
96 links
Tips and tricks от команды экспертного центра безопасности Positive Technologies (PT ESC)
加入频道
Где искать сетевые индикаторы компрометации на Windows? Например, в кэше DNS 💡

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

У каждой DNS-записи есть параметр TTL (time to live), который определяет, как долго запись остается действительной. По истечении TTL запись «протухает» — и система вновь вынуждена запрашивать данные у DNS-сервера.

Windows хранит перечень кэшированных доменов в виде связного списка, а запрос содержимого кэша состоит из двух этапов: на первом этапе с помощью системного вызова DnsGetCacheDataTable формируется полный список кэшированных доменов, затем для каждого домена из списка происходит резолв из кэша с помощью системного вызова DnsQuery с флагом DNS_QUERY_NO_WIRE_QUERY. Таким образом для каждого кэшированного домена из кэша извлекаются соответствующие ресурсные записи: A, AAAA, TXT и так далее.

😐 Здесь-то и кроется подвох. Если домен содержится в списке кэшированных, а его TTL истекло, то команда ipconfig /displaydns не только не покажет такой домен в списке, но и удалит его из списка кэшированных доменов, тем самым уничтожив потенциальные улики.

Чтобы получить полный список кэшированных доменов (даже «протухших»), можно использовать вызов DnsGetCacheDataTable. Ниже приведен скрипт для PowerShell, реализующий эту функцию:


Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;

namespace DnsCache
{
[StructLayout(LayoutKind.Sequential)]
public struct DnsCacheEntry
{
public IntPtr PNext;
public IntPtr Name;
public ushort Type;
public ushort DataLength;
public uint Flags;
}

public class Program
{

[DllImport("dnsapi.dll")]
public static extern void DnsGetCacheDataTable(ref DnsCacheEntry entry);
public static void GetCache()
{
DnsCacheEntry a = new DnsCacheEntry();
DnsGetCacheDataTable(ref a);
while (true)
{
Console.WriteLine("RR name: {0}", Marshal.PtrToStringAuto(a.Name));
if (a.PNext == IntPtr.Zero) break;
a = Marshal.PtrToStructure<DnsCacheEntry>(a.PNext);
}

}
}
}
"@
[DnsCache.Program]::GetCache()


Попробуйте выполнить этот скрипт, а потом сравните с результатами вызова ipconfig /displaydns (именно в таком порядке).

Happy hunting!

#tips #hunting #win #dfir #dotnet #triage
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
.NET Reactor: эволюция защиты с 6.7 до 7.0 и методы снятия обфускации 🔄

.NET Reactor — это мощный инструмент для защиты исполняемых файлов, написанных на С#, от декомпиляции и обратного инжиниринга. Он предоставляет различные методы обфускации и лицензирования, обеспечивая безопасность интеллектуальной собственности разработчиков.

Но, как это обычно бывает, применяется он не только в благих целях: экспертам антивирусной лаборатории PT ESC часто попадаются вредоносные файлы, защищенные от анализа именно .Net Reactor.

🔓 Как защищен?

.NET Reactor использует несколько уровней защиты для предотвращения декомпиляции и анализа кода:

• NecroBit IL Code Protection: заменяет CIL-код методов на зашифрованный, делая невозможной декомпиляцию и восстановление исходного кода.

• Виртуализация кода: преобразует исходный код в набор инструкций отличный от .NET IL, которые интерпретируются во время выполнения виртуальной машиной, что затрудняет анализ и восстановление оригинального кода.

• Обфускация потока управления (Control Flow Obfuscation): преобразует код методов в запутанную структуру, усложняя понимание логики программы и затрудняя работу декомпиляторов (пример — на скриншоте 1).

• Шифрование строк (String Encryption): шифрует строки в коде, предотвращая их чтение и анализ, что усложняет понимание функциональности приложения, как показано на скриншоте 2.

• Антиотладочные механизмы (Anti Debug): внедряет проверки на наличие отладчиков, завершая процесс при их обнаружении, что препятствует динамическому анализу приложения.

🆕 Что нового?

• Поддержка .NET 6.0: обеспечивает защиту для новейших приложений на этой платформе.

• Улучшения в виртуализации кода и Control Flow Obfuscation обеспечивают дальнейшее повышение надежности и сложности обфускации.

• Скрытие содержимого объединенных приложений .NET Core, 5.0, 6.0 предотвращает просмотр содержимого с помощью инструментов, таких как ILSpy / dnSpy.

🧐 Как анализировать?

Несмотря на сложность защиты, существуют инструменты, которые облегчают жизнь реверсерам.
NETReactorSlayer — мощный инструмент для реверса приложений, обфусцированных с помощью .NET Reactor. Его главные фишки:

• дешифровка NecroBit — восстанавливает CIL-код из зашифрованных методов;

• удаление прокси и оберток — очищает код от мусора, добавленного обфускатором (смотрите на скриншоте 3);

• декодирование строк и ресурсов — возвращает читаемые строки, зашифрованные в приложении;

• обход антиотладки и защиты от изменения кода.

Однако начиная с версии 6.9 изначальная версия Net Reactor Slayer перестала справляться с деобфускацией защиты даже с базовыми параметрами. Благодаря открытому исходному коду и довольно большому комьюнити, в pull requests можно найти исправленный код, который прекрасно отрабатывает даже на самой свежей версии обфускатора.

Но вот с виртуализированным кодом не все так гладко: Net Reactor Slayer с ним не справляется. Если вам повезло и файл был защищен версией 6.9.0.0, то можно не тратить время на ручной анализ виртуальной машины, а применить VMAttack — инструмент для девиртуализации приложений .NET, в котором есть поддержка этой версии .NET Reactor. А если не повезло — проще всего проанализировать файл по его поведению, например с помощью PT Sandbox.

☝️ Вывод

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

#avlab #sandboxteam #dotnet #obfuscation
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM