Сейчас на форуме: Slinger, Rio (+5 невидимых)

 eXeL@B —› Основной форум —› Рассуждение на тему енжекта кода
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 8.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 июля 2006 04:14 · Поправил: nim iNT3_TEAM
· Личное сообщение · #1

Давайте по рассуждаем о методах обнаружения инжекта кода, и о противодействии им.

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




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 04 июля 2006 06:10
· Личное сообщение · #2

Так делает ExeCryptor при проверке CRC, и ничего, инлайнят. А ответ ты дал сам, когда упомянул поток...

-----
Yann Tiersen best and do not fuck




Ранг: 8.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 июля 2006 06:31
· Личное сообщение · #3

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




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 04 июля 2006 10:49
· Личное сообщение · #4

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

-----
Yann Tiersen best and do not fuck





Ранг: 120.6 (ветеран)
Активность: 0.090
Статус: Участник
rootkit developer

Создано: 04 июля 2006 10:54
· Личное сообщение · #5

PE_Kill пишет:
Как бы мне пропатчить прогу, чтобы CRC чекер не увидел изменений, при этом не патчить сам CRC чекер и не подменять CRC сумму

А ведь это возможно. Правда далеко не просто в реализации, и требует наличия драйвера.

nim iNT3_TEAM пишет:
Возможно ли обойти такой метод обнаружения не прибегая к кернел кодингу?

Во-первых, этот метод обнаружения будет неюзабельным, так как патч экспортов и кода DLL часто делают различные security программы, а значит такой метод будет постоянно глючить.
Во-вторых, я думаю можно это будет обойти и без патча кода программы (есть на этот счет соображения), правда о конкретных методах обхода можно будет сказать только увидев реализацию проверки.

-----
Скажем дружно - нафиг нужно.





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 04 июля 2006 11:07
· Личное сообщение · #6

Если только на уровне векторных прерываний работать (>=2000 AddVectoredExceptionHandler) то можно через DR регистры или No Access (PAGE_GUARD) на нужные участки.

-----
Yann Tiersen best and do not fuck




Ранг: 9.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 июля 2006 11:22
· Личное сообщение · #7

PE_Kill
Это равносильно: "Как бы мне пропатчить прогу, чтобы CRC чекер не увидел изменений, при этом не патчить сам CRC чекер и не подменять CRC сумму"...
Если в качестве crc использовать стандартную crc-8/16/32/64 (основанную на полиномиальном остатке от деления), то это вполне реально. Есть методики, как подменить байты так, чтобы и crc-сошлась, и код проверки не трогать. На произвольные байты, конечно не поменяешь, но если это код, то всегда можно вставить прыжок через нужные "мусорные" байты. Некоторые виды простых хэшэй (не криптографических), тоже изумительно реверсируются и позволяют плодить коллизии. Но способ не универсальный, ясное дело...

А вот если это хэш стойкий к подбору коллизий, тогда все. Проще код проверки или сам хэш править...



Ранг: 228.7 (наставник), 2thx
Активность: 0.120
Статус: Участник
malware research

Создано: 04 июля 2006 12:00
· Личное сообщение · #8

nim iNT3_TEAM пишет:
Допустим програмист заранее подготовил таблицу хешей секций импорта, экспорта

Если целью инжекта является перехват API функций, то необязательно изменять импорт -- можно перехватывать путем сплайсинга (перезапись кода начала самой перехватываемой функции). К тому же так надежнее по-идее, потому как обработчик перехвата через модификацию IAT не сработает, если вызывать функцию через GetProcessAddress.
Ms-Rem пишет:
этот метод обнаружения будет неюзабельным, так как патч экспортов и кода DLL часто делают различные security программы

И какие, если не секрет, security программы используют такой сверхнадежный способ?

-----
Research is my purpose





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 04 июля 2006 12:37 · Поправил: Nimnul
· Личное сообщение · #9

Error_Log пишет:

И какие, если не секрет, security программы используют такой сверхнадежный способ?


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

Error_Log пишет:
Если целью инжекта является перехват API функций, то необязательно изменять импорт -- можно перехватывать путем сплайсинга


nim iNT3_TEAM пишет:
Допустим програмист заранее подготовил таблицу хешей секций импорта, экспорта и кода


-----
have a nice day





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 04 июля 2006 12:41 · Поправил: Nimnul
· Личное сообщение · #10

Ms-Rem пишет:
есть на этот счет соображения


поделись соображениями без проверки

ПС: я на васме логин потерял, хотел там в коментах сказать скажу здесь. Пример инекции "чистого" кода понравился своей оригинальностью

-----
have a nice day




Ранг: 228.7 (наставник), 2thx
Активность: 0.120
Статус: Участник
malware research

Создано: 04 июля 2006 12:54 · Поправил: Error_Log
· Личное сообщение · #11

Nimnul пишет:
таблицу хешей секций импорта, экспорта и кода

Хеш кода системных функций или своей программы? Если зараннее подготавливать хеши системных функций - то это слишком гиморно, врядли кто-то будет делать
Nimnul пишет:
Он имел ввиду что всякие проги типа аутпоста или сейф-энд-сек могут инжектировать свои длл

SNS устанавливает хуки в kernel-mode путем подмены function pointer в SSDT, насколько помню - аутпост тоже. Инжектировать в контекст каждого процесса длл для перехвата - это извратный и ненадежный способ, просто интересно, неужели его кто-то использует?
Ms-Rem
Можно ли использовать функцию ZwWriteRequestData для инжекта?

-----
Research is my purpose





Ранг: 120.6 (ветеран)
Активность: 0.090
Статус: Участник
rootkit developer

Создано: 04 июля 2006 13:16
· Личное сообщение · #12

Error_Log пишет:
И какие, если не секрет, security программы используют такой сверхнадежный способ?

Из того что могу сразу вспомнить, это
1) Kaspersky antivirus 5
2) Kaspersky Internet Security 2006
3) StarForce Safe 'n Sec
4) Kerio personal firewall
5) Tiny firewall
6) BitDefender
7) F-Secure Internet Security 2006
Этого списка достаточно? или надо еще?

-----
Скажем дружно - нафиг нужно.





Ранг: 105.9 (ветеран)
Активность: 0.060
Статус: Участник

Создано: 04 июля 2006 13:53
· Личное сообщение · #13

nim iNT3_TEAM пишет:
методах обнаружения инжекта кода, и о противодействии им.

Единственный рабочий метод был у Themidы с драйвером. Ну а как показала практика все знают, нет больше в themide драйвера.
Тем более, нужно учитывать, что многие утилиты инжектят свои длл во все процессы. Вот у меня стоит Winpatrol он так и делает. И если найдется программа, которая с ним не подружит, то она уйдет в долгий путь. Еще более яркий пример PowerStrip (для настройки видео карты). Вообще без нее у меня очень темное изображение и она по умолчанию тоже запускается в трее и инжектит свою powerhook.dll во все процессы.
nim iNT3_TEAM пишет:
таблицу хешей секций импорта, экспорта

ну, Виндовский peloader изменяет их значения в зависимости от ОС.
PE_Kill пишет:
Так делает ExeCryptor при проверке CRC, и ничего, инлайнят

Причем за милую душу. Все эти CRC до одного места, если потом тупо показывать окно "CRC error". Тем более, подсчет CRC это так или иначе цикл, а если навесить на этот цикл VM, то пользователь раньше нажмет Ctrl+Alt+Del, чем запустится эта программа. Так что, все crc подсчеты отлично просматриваются и патчатся.

По поводу инжекта кода. Я как правило перехватываю Nt функции windows при помощи shell кода, без всяких геморов с dll. А от этого в ring3 можно спастись только одним достоверным способом. Вот только NtCreatefile тоже перехвачен...
А с перехватом Nt функции windows можно пропатчить ЛЮБОЙ RING3 протектор!!!.
Мои рассуждения: при борьбе с инжектом ты получишь только несовместимость, хотя это тоже защита




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 04 июля 2006 14:28
· Личное сообщение · #14

seeq пишет:
Причем за милую душу. Все эти CRC до одного места, если потом тупо показывать окно "CRC error".

Бывает при этом он запускает второй поток, который убивает процесс через ~1 секунду. Но это тоже не проблема, sleep рулит...

-----
Yann Tiersen best and do not fuck





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 04 июля 2006 17:18
· Личное сообщение · #15

seeq пишет:
По поводу инжекта кода. Я как правило перехватываю Nt функции windows при помощи shell кода, без всяких геморов с dll. А от этого в ring3 можно спастись только одним достоверным способом. Вот только NtCreatefile тоже перехвачен...


Где ты их перехватываеш, в ядре или в процессе?

seeq пишет:

при борьбе с инжектом ты получишь только несовместимость


можно внести в хеш таблицу системные библиотеки xp, xp1, xp2, w2k, w2k3 не так уж и много получается.

Вот у меня стоит Winpatrol он так и делает

Ситуация такая на время работы проги все остальные полезные проги идут лесом, либо лесом идет юзер.

ПС. забудьте уже про CRC я же сказал rsa hash

-----
have a nice day





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 04 июля 2006 17:20
· Личное сообщение · #16

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

-----
have a nice day





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 04 июля 2006 17:28
· Личное сообщение · #17

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

-----
have a nice day




Ранг: 228.7 (наставник), 2thx
Активность: 0.120
Статус: Участник
malware research

Создано: 04 июля 2006 19:25 · Поправил: Error_Log
· Личное сообщение · #18

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

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

-----
Research is my purpose




Ранг: 8.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 июля 2006 03:30 · Поправил: nim iNT3_TEAM
· Личное сообщение · #19

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

Error_Log пишет:

Ну, например, - для того, чтобы расчитать хеш - тебе прийдется читать память.


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




Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 05 июля 2006 13:26
· Личное сообщение · #20

ну хоть кто-то толково взялся за античит ) надеюсь для CS 1.6? где можно увидеть демку сего творения? ориентировано как закрытый продукт?

тут вон один товарисч написал античит "зверский" (sentenced / SFA) который воркал в ring0 и жестко прятал процесс игрухи +) никто из читов даже добраться не могу до нутра (оставались правда варианты со спидхаком и прочим). но валился собака...



Ранг: 8.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 июля 2006 03:44
· Личное сообщение · #21

NaumLeNet пишет:
надеюсь для CS 1.6?


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

NaumLeNet пишет:
где можно увидеть демку сего творения? ориентировано как закрытый продукт?


полная версия будет на нашем сайте.
 




Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 06 июля 2006 08:51
· Личное сообщение · #22

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

з.ы. поддержка SSL? нормальная работа с NAT?



Ранг: 8.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 июля 2006 09:27
· Личное сообщение · #23

Поддержка DES, на счет NAT не знаю нефкурил еще, незнаю пока как по пакетам отличать юзеров за НАТом.



Ранг: 8.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 июля 2006 09:29
· Личное сообщение · #24

NaumLeNet пишет:
/ хэшей читов


Не хешей читов, а хешей длл и ехе защищаемого приложения.



Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 06 июля 2006 09:51
· Личное сообщение · #25

PE_Kill пишет:
Это равносильно: "Как бы мне пропатчить прогу, чтобы CRC чекер не увидел изменений, при этом не патчить сам CRC чекер и не подменять CRC сумму"...


www.phrack.org/phrack/63/p63-0x08_Raising_The_Bar_For_Windows_Rootkit_Detection.txt - хорошая пища для размышлений.


Nimnul пишет:
Есть ли метод позволяющий сокрыть хук, без кернел кодинга и без патча?

nim iNT3_TEAM пишет:
А память будет читать ядро, реализуещее крипто API


Т.е. ты вызываешь совершенно беззащитные функи из Advapi32.dll ?



Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 06 июля 2006 09:56
· Личное сообщение · #26

nim iNT3_TEAM пишет:
Когда мне нужно получить хеш, я всего навсего передаю укзатель на буфер + размер.


Значит тебе будет нужен надёжный механизм получения адреса этого самого буфера ;)



Ранг: 8.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 июля 2006 10:28
· Личное сообщение · #27

Адрес буфера == начало проверяемой секции



Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 06 июля 2006 10:34 · Поправил: S_T_A_S_
· Личное сообщение · #28

А откуда увереность, что адрес начала секции правильный?



Ранг: 8.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 июля 2006 10:59
· Личное сообщение · #29

я делаю парсинг PE



Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 06 июля 2006 11:48
· Личное сообщение · #30

Т.е. сканируешь виртуальное адресное пространство и ищешь там имиджы?


. 1 . 2 . >>
 eXeL@B —› Основной форум —› Рассуждение на тему енжекта кода
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати