14.10.2013

Почему notepad.exe подсоединяется к интернету?

image

Для надежного средства сетевой защиты notepad.exe, соединяющийся с интернетом, - ключевой индикатор скомпрометированной системы. В этой статье расскажу о том, почему фреймворки инжектируют код в процесс notepad.exe, и как можно этого избежать во время осуществления атаки.

Автор: Raphael Mudge

Для надежного средства сетевой защиты notepad.exe, соединяющийся с интернетом, - ключевой индикатор скомпрометированной системы. В этой статье расскажу о том, почему фреймворки инжектируют код в процесс notepad.exe, и как можно этого избежать во время осуществления атаки.

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

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

Cobalt Strike и Metasploit Framework по умолчанию используют notepad.exe для размножения (spawn) и внедрения кода. Notepad.exe – хороший кандидат на эту роль, поскольку 32-битная его версия присутствует в системах x86 и x64. К тому же, этот местонахождение этого файла всегда одинаково в обеих системах. Еще один ключевой критерий в пользу notepad.exe – я могу размножить процесс notepad.exe без каких-либо препятствий, и он не завершит свою работу сразу же.

Если проводятся тренировочные испытания, и команда по безопасности избавилась от файла notepad.exe (немного грязноватый трюк, но все-таки), у вас могут возникнуть проблемы. Если команда по безопасности завершила процесс notepad.exe, у вас могут возникнуть проблемы. Кроме того, если в организации используется система Ambush IPS, и в ней прописано правило по обнаружению процесса notepad.exe, использующего функцию Winsock или WinINet, у вас также могут возникнуть проблемы.

Для того чтобы обойти все вышеупомянутые случаи, необходимо знать о том, как адаптировать утилиты для использования других файлов помимо notepad.exe. Вот несколько советов:

Meterpreter

Cobalt Strike предоставляет возможность установить статические «слушатели» (static listener). Если вы создадите Meterpreter-слушатель и отметите галочку Automatically migrate session, то вы как бы говорите Cobalt Strike, что хотели бы переместить Meterpreter в новый процесс после создания новой сессии. Это действие заставляет Cobalt Strike установить опцию Metasploit Framework InitialAutoRunScript migrate –f во время создания нового обработчика.

К слову сказать, многие эксплоиты Metasploit Framework, работающие на стороне клиента, устанавливают автоматически опцию InitialAutoRunScript migrate –f.

После установки опции InitialAutoRunScript будет выполняться специальный Meterpreter-скрипт после возникновения сессии. Этот скрипт находится по адресу /path/to/metasploit/msf3/scripts/meterpreter/migrate.rb. Опция –f открывает новый процесс (notepad.exe) и перемещает туда вашу Meterpreter-сессию.

# Creates a temp notepad.exe to migrate to depending the architecture.
def create_temp_proc()
sysinfo = client.sys.config.sysinfo
windir = client.fs.file.expand_path("%windir%")
# Select path of executable to run depending the architecture
if sysinfo['Architecture'] =~ /x86/
cmd = "#{windir}\\System32\\notepad.exe"
else
cmd = "#{windir}\\Sysnative\\notepad.exe"
end
# run hidden
proc = client.sys.process.execute(cmd, nil, {'Hidden' => true })
return proc.pid
end

Вы можете изменить некоторые строки этого кода, чтобы заставить Cobalt Strike и Metasploit Framework переместить Meterpreter-сессию в другой процесс (вместо notepad.exe). В качестве альтернативы попробуйте rundll32.exe. На момент написания этой статьи строки 42-54 содержали код, который необходимо изменить.

Передача сессии

Если вы передаете сессии при помощи post/windows/manage/payload_inject или exploits/windows/local/payload_inject, имейте ввиду, что оба модуля по умолчанию размножают процесс notepad.exe для внедрения стэйжера (stager) для нужного типа сессии. Для этого также существует весьма веская причина. Если я инжектирую шеллкод в текущий процесс, и шеллкод аварийно завершает работу, мой процесс также завершит работу… вместе с моей сессией.

Такое происходит намного чаще, чем вы можете подумать. Если я попытаюсь инжектировать стэйжер windows/meterpreter/reverse_tcp, и он не сможет соединиться с обработчиком, то процесс аварийно завершит свою работу.

# Creates a temp notepad.exe to inject payload in to given the payload
# Returns process PID
def create_temp_proc()
windir = client.fs.file.expand_path("%windir%")
# Select path of executable to run depending the architecture
if @payload_arch.first== "x86" and client.platform =~ /x86/
cmd = "#{windir}\\System32\\notepad.exe"
elsif @payload_arch.first == "x86_64" and client.platform =~ /x64/
cmd = "#{windir}\\System32\\notepad.exe"
elsif @payload_arch.first == "x86_64" and client.platform =~ /x86/
cmd = "#{windir}\\Sysnative\\notepad.exe"
elsif @payload_arch.first == "x86" and client.platform =~ /x64/
cmd = "#{windir}\\SysWOW64\\notepad.exe"
end
begin
proc = client.sys.process.execute(cmd, nil, {'Hidden' => true })
rescue Rex::Post::Meterpreter::RequestError
return nil
end
return proc.pid
end

Самый безопасный способ – инжектировать в новый процесс. Чтобы исключить использование notepad.exe в этих модулях просто отредактируйте следующие файлы:

Замечание: функционал этих модулей абсолютно одинаков. На момент написания статьи Metasploit Framework все еще находился в стадии портирования post-модулей, принимающих полезную нагрузку, к модулям из папки windows/local. Полагаю, что post-модули станут неактуальны, как только у них появятся соответствующие эквиваленты.

Beacon

Полезная нагрузка Beacon, входящая в состав Cobalt Strike, - простой способ быстрого размножения Meterpreter-сессий по мере необходимости. Как и упомянутый выше модуль payload_inject, Beacon создает скрытый процесс notepad.exe во время размножения сессии. К счастью, у Beacon есть несколько опций, которые позволяют на лету изменять ее поведение.

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

Команда spawnto применима только к текущему экземпляру Beacon. Это сделано намеренно для того, чтобы вы могли контролировать несколько экземпляров Beacon различных систем с различными настройками.

Вы также можете инжектировать сессии в запущенный процесс при помощи команды inject. Для этого нужно указать идентификатор процесса и имя «слушателя» (listener).

В этой статье я рассмотрел стандартные функции Metasploit Framework и Cobalt Strike по размножению и внедрению кода в notepad.exe. Было объяснено, почему такой функционал стандартен и дано несколько советов для изменения подобного поведения во время осуществления атак. Теперь, если стандартный функционал мешает вам при реализации атаки, вы легко можете настроить его под свои нужды.       

или введите имя

CAPTCHA