­čĺë Process Injection Teknikleri Ve Detaylar─▒

Hi├ž legal bir sistem uygulamas─▒n─▒n sistem kaynaklar─▒n─▒ gere─činden fazla t├╝ketme ve ola─čan d─▒┼č─▒ a─č hareketleri gibi al─▒┼č─▒lmad─▒k davran─▒┼člarda bulundu─čunu farkettiniz mi? Forumlarda s─▒k s─▒k kar┼č─▒m─▒za ├ž─▒kan ÔÇťsvchost.exe vir├╝s m├╝d├╝r?ÔÇŁ gibi sorulara i┼čin farkl─▒ bir y├╝z├╝nden en teknik detaylar─▒ ile cevap veriyorum. Bir e─čitim niteli─činde olan bu makalemizde sizlere Process Injection Tekniklerini olabildi─čince detayl─▒ ve a├ž─▒klay─▒c─▒ ┼čekilde anlatt─▒m.

Process Injection Nedir?

Process Injection (Code Injection diye de nitelendirilir) i┼čleminde temel ama├ž, zararl─▒ bir uygulaman─▒n veya kodun, legal bir processÔÇÖin belle─čine enjekte edilmesidir. Legal processÔÇÖin belle─čine enjekte edilecek olan nesne, bazen bir executable, bazen bir DLL, bazen de Shellcode olabilir. Enjekte i┼člemi tamamland─▒ktan sonra ise legal process bu enjekteyi ├žal─▒┼čt─▒rmaya zorlan─▒r. Process Injection sald─▒rgana bir ├žok avantaj sa─člamakla beraber, enjeksiyon yapan sald─▒rgan ┼ču i┼člemleri yapabilir:

  • Legal processÔÇÖi dosya indirme, y├╝kleme ve keyboard hareketlerini almaya zorlamak gibi i┼člemler yapabilir.
  • API ├ža─čr─▒lar─▒n─▒ y├Ânlendirebilir, APIÔÇÖlerin parametrelerini ele ge├žirebilir ve APIÔÇÖlerin exportÔÇÖlar─▒n─▒ filtreleyebilir.
  • Legal processÔÇÖe enjekte i┼člemi yapt─▒─č─▒ i├žin baz─▒ g├╝venlik ├╝r├╝nlerini dolayl─▒ yoldan baypassÔÇÖlayabilir.
  • Ve ├žok daha fazlas─▒n─▒ yapabilir. Evet, genellikle sald─▒rganlar (malware geli┼čtiricileri) bu teknikten s─▒k s─▒k faydalan─▒r. Peki sadece sald─▒rganlar m─▒ yararlan─▒r? Tabiki de hay─▒r. Bir ├žok g├╝venlik ├╝r├╝n├╝ sistem ├╝zerinde korumay─▒ tam olarak ger├žekle┼čtirebilmek ad─▒na enjeksiyon tekniklerini kullanmaktad─▒r. Bunu da bir not olarak d├╝┼čmekte fayda var.

Genel bir ├Ârnek ile a├ž─▒klayacak olursak, enjekte edilecek nesne (exe, DLL,Shellcode vs.) var olan bir processÔÇÖe veya kendi taraf─▒ndan ba┼člat─▒lan bir processÔÇÖe enjekte olabilmesi i├žin ├Âncelikle enjekte olaca─č─▒ processÔÇÖi tan─▒mlamas─▒ gerekir. Bunun i├žin enumerate i┼člemi yap─▒labilir. Enumerate i┼člemi i├žin birka├ž Windows APIÔÇÖsi bulunmaktad─▒r. Bunlar;

  • CreateTool32HelpSnapshot()
  • Process32First()
  • Process32Next()

CreateToolhelp32Snapshot() APIÔÇÖsi, o an sistemde ├žal─▒┼čan t├╝m processÔÇÖlerin bir snapshotÔÇÖ─▒n─▒ al─▒r. Daha sonra Process32First() APIÔÇÖsi snapshotÔÇÖ─▒ al─▒nan t├╝m processÔÇÖler aras─▒ndan ilki hakk─▒nda bilgiler al─▒r. Process32Next() ile de snapshotÔÇÖ─▒ al─▒nan di─čer t├╝m processÔÇÖler aras─▒nda tek tek gezme i┼člemi yapar ve hepsi hakk─▒nda bilgi toplar. Process32First() ve Process32Next() fonksiyonlar─▒ sayesinde enumerate edilen processÔÇÖler hakk─▒nda al─▒nabilen bilgilerden baz─▒lar─▒ ┼čunlard─▒r;

  • ExecutableÔÇÖ─▒n ad─▒,
  • Process IDÔÇÖsi (PID),
  • Child ProcessÔÇÖin IDÔÇÖsi, Ve daha fazla bilgiye eri┼čilebilmektedir.

Process32First() ve Process32Next() APIÔÇÖlerinin birlikte kullan─▒m─▒ Process Walking ad─▒nda bir tekni─či de temsil etmektedir. Process Walking, sistem snapshotÔÇÖ─▒ndaki processÔÇÖleri tek tek gezerek bilgi toplama i┼člemine verilen add─▒r. Ayr─▒ca Toolhelp32ReadProcessMemory() APIÔÇÖsi ile de belirli bir processÔÇÖin belle─čini okunabilir.

Process Walking i┼člemi ile malware, enjekte edilecek processÔÇÖin var olup olmad─▒─č─▒n─▒ kontrol edebilir. Var ise enjekte olabilir, yok ise hedef processÔÇÖi ba┼člatabilir. Daha sonra ise malware nesnesi (DLL, executable, Shellcode vs.) legal processÔÇÖin belle─čine kendisini enjekte eder ve legal processÔÇÖin enjekte olan zararl─▒y─▒ ├žal─▒┼čt─▒rmas─▒ i├žin zorlar.

Process Injection Scheme

Yukar─▒daki g├Ârselde bu i┼člem anla┼č─▒l─▒r bir ┼čekilde g├Âsterilmi┼čtir. MalwareÔÇÖ─▒n user spaceÔÇÖde ├žal─▒┼čt─▒─č─▒n─▒ da unutmayal─▒m!

Process Injection hakk─▒nda bir genelleme yapt─▒k fakat bu ana ba┼čl─▒k, farkl─▒ farkl─▒ teknikleri alt dallar─▒nda bar─▒nd─▒rmaktad─▒r. ┼×imdi ise Process Injection tekniklerinin detaylar─▒na de─činecek ve en ├žok bilinen, etkili teknikleri a├ž─▒klayaca─č─▒z.

1. Remote DLL Injection

Remote DLL Injection metoduna ge├žmeden ├Ânce DLL hakk─▒nda k─▒sa bir bilgi vermekte fayda var. A├ž─▒l─▒m─▒ Dynamic Linking Library olan DLLÔÇÖler bir kod/veri k├╝t├╝phanesidir. Bir ├žok uygulaman─▒n ortak bir ┼čekilde kullanmas─▒ i├žin tasarlanm─▒┼čt─▒r. DLL kullan─▒m─▒ daha fazla performans, daha az bellek kullan─▒m─▒ gibi faydalar sa─člamaktad─▒r.

Process Injection 2

Yukar─▒daki g├Ârselde de g├Âr├╝ld├╝─č├╝ ├╝zere MZ ve PE headerlar─▒na sahip olmas─▒na ra─čmen bir executableÔÇÖ─▒n karakteristi─čine sahip olsa da tek ba┼č─▒na ├žal─▒┼čamamaktad─▒r. K─▒sa bir ┼čekilde DLLÔÇÖden de bahsetti─čimize g├Âre Remote DLL InjectionÔÇÖa ge├ži┼č yapabiliriz.

Remote DLL Injection metodu ge├žti─čimiz zamanlarda ve g├╝n├╝m├╝zde s─▒k├ža kullan─▒lmaktad─▒r. Malware legal bir processÔÇÖin virtual memoryÔÇÖsine zararl─▒ DLLÔÇÖin yolunu yazarak ve legal processÔÇÖde remote thread olu┼čturarak bu zararl─▒ DLLÔÇÖin y├╝klenmesini sa─člar.

├ľncelikle zararl─▒n─▒n yapmas─▒ gereken i┼člem Process32First, Process32Next ve CreateToolhelp32Snapshot ile az ├Ânce bahsetti─čim **Process Walking **i┼člemlerini yap─▒p injekte olaca─č─▒ processÔÇÖi belirlemektir.

Daha sonra ise OpenProcess APIÔÇÖsini kullanarak tespit etti─či hedef processÔÇÖin handleÔÇÖ─▒n─▒ al─▒r. HandleÔÇÖ─▒n tan─▒m─▒n─▒ WindowsÔÇÖun MSDN d├Âk├╝manlar─▒ndan al─▒nt─▒ yaparak a├ž─▒klayacak olursak;

Handle, bir nesneye yap─▒lan ba┼čvurudur. Bir processÔÇÖin bir nesneye (dosya, kay─▒t defteri, mutex vb.) eri┼čebilmesi bir handle a├žmas─▒ gerekir. ├ľrnek vermek gerekirse bir processÔÇÖin dosyaya yazma i┼člemi yapmak istedi─čini d├╝┼č├╝nelim. Process ├Ânce gerekli APIÔÇÖyi(WriteFile) ├ža─č─▒r─▒r. Daha sonra handleÔÇÖ─▒ WriteFile APIÔÇÖsine ileterek dosyaya yazmak i├žin handleÔÇÖ─▒(tan─▒c─▒ da deniyor) kullan─▒r.

ProcessÔÇÖin handleÔÇÖ─▒n─▒ alan malware, daha sonra VirtualAllocEx APIÔÇÖsi ile bellekte allocate (yer ay─▒rma) i┼člemi uygular. Daha sonra bellekte ay─▒rd─▒─č─▒ lokasyona WriteProcessMemory APIÔÇÖsi ile zararl─▒ DLLÔÇÖin yolunu yazar.

Process Injection 3

Daha sonra bellekteki lokasyona yolu yaz─▒lan zararl─▒ DLLÔÇÖin threadÔÇÖler taraf─▒ndan ├žal─▒┼čt─▒r─▒lmas─▒ gerekir. Bunun i├žin de malware, CreateRemoteThread, NtCreateThreadEx, RtlCreateUserThread gibi APIÔÇÖleri ├ža─č─▒r─▒r. Ve bu APIÔÇÖlerin i├žine DLL y├╝kleme i├žin kullan─▒lan LoadLibrary APIÔÇÖsini yerle┼čtirir. LoadLibrary APIÔÇÖsinin i├žerisine ise zararl─▒ DLLÔÇÖin yerini yerle┼čtirir. Bu i┼člemlerden sonra Remote DLL InjectionÔÇÖ─▒n pseudo kodu ┼ču ┼čekilde olmaktad─▒r:

CreateRemoteThread(LoadLibrary(C:\Program Files\zararli.dll))

CreateRemoteThread APIÔÇÖsi art─▒k bir ├žok g├╝venlik ├╝r├╝n├╝ taraf─▒ndan izlenmektedir. Ak─▒ll─▒ bir malware geli┼čtiricisi bu APIÔÇÖyi kullanmayacakt─▒r. A┼ča─č─▒daki g├Ârselde ise bu y├Ântemi kullanan Rebhip wormÔÇÖuna ait bir statik kod analizini g├Ârmektesiniz.

Process Injection 4

├ľrnek bir Remote DLL Injection sonras─▒ amac─▒m─▒za ula┼čabiliyoruz:

Process Injection 5

2. APC DLL Injection

CreateRemoteThread() APIÔÇÖsi ile Remote DLL Injection tekni─činin ard─▒ndan ┼čimdi ise APC DLL Injection tekni─čini g├Ârece─čiz.

Bu teknik, Remote DLL Injection tekni─čine benzer. Fakat ayr─▒m noktas─▒, DLL enjekte i┼čleminde CreateRemoteThread() APIÔÇÖsi yerine WindowsÔÇÖun APC(Asynchronous Procedure Call)ÔÇÖsini kullan─▒r. APCÔÇÖnin k─▒sa bir tan─▒m─▒n─▒ yapacak olursak;

APC, belirli bir thread ba─člam─▒nda e┼čzamans─▒z olarak ├žal─▒┼čan bir i┼člevdir. Her thread, hedef thread uyar─▒labilir bir duruma girdi─činde y├╝r├╝t├╝lecek bir APC s─▒ras─▒ i├žerir.

Yani ├Âzetleyecek olursak, APC threadlerin bekleme zaman─▒nda daha az bellek kullanmas─▒ i├žin tasarlanm─▒┼č bir ├žal─▒┼čma birimidir. Bir program─▒n birden fazla thread ile ├žal─▒┼čt─▒─č─▒n─▒ varsayal─▒m. Genellikle threadÔÇÖler birbirleri ile e┼čzamanl─▒ olarak ├žal─▒┼č─▒r. Fakat baz─▒ veriler haz─▒r de─čilse (├Ârne─čin program kullan─▒c─▒dan girdi veya onay bekliyorsa) thread, stacktÔÇÖte ├Ânemli bir miktarda memoryÔÇÖden yer ay─▒rd─▒─č─▒ ve bu bellek onay gelene kadar kullan─▒lamayaca─č─▒ i├žin threadÔÇÖi bekleme durumunda memoryÔÇÖde tutmak pek mant─▒kl─▒ olmayacakt─▒r.

Bundan ├Ât├╝r├╝ thread stackÔÇÖi bellekte daha az yer kaplayan bir nesne olarak olu┼čturulur. Ve bu nesne, kullan─▒c─▒ giri┼člerini alan hizmete aktar─▒l─▒r. Kullan─▒c─▒dan yan─▒t al─▒nd─▒─č─▒nda hizmet bunu nesneye koyar ve nesneyi execute birimine iletir.

Execute hizmeti ise bir veya daha fazla thread ve g├Ârev kuyru─čundan olu┼čur. Her ├žal─▒┼čan thread bir g├Ârev ald─▒─č─▒nda bunu execute eder. Herhangi bir g├Ârev olmad─▒─č─▒nda ise thread bekler ve b├Âylece bellek kullan─▒lmaz.

K─▒sa bir ┼čekilde APCÔÇÖnin de tan─▒m─▒n─▒ yapt─▒─č─▒m─▒za g├Âre APC DLL Injection tekni─čine ge├žebiliriz.

Az ├Ânce threadÔÇÖin uyar─▒labilir(alterable) duruma ge├žmesinden bahsetmi┼čtik. Bir thread a┼ča─č─▒daki APIÔÇÖlerden birisini ├ža─č─▒rd─▒─č─▒nda alterable duruma ge├žebilir:

  • SleepEx();
  • SignalObjectAndWait();
  • MsgWaitForMultipleObjectsEx();
  • WairForMultipleObjectsEx();
  • WaitForSingleObjectEx();

APC DLL Injection tekni─činde temel ama├ž; malwareÔÇÖ─▒n hedef processÔÇÖteki alterable durumda olan veya alterable duruma ge├žme olas─▒l─▒─č─▒ bulunan threadÔÇÖi tan─▒mlamas─▒ ile ba┼člar. Daha sonra zararl─▒ olan custom codeÔÇÖu QueueUserAPC() APIÔÇÖsini kullanarak threadÔÇÖin APC kuyru─čuna yerle┼čtirir. Daha sonra ise thread, kuyru─ča al─▒nan bu zararl─▒ custom codeÔÇÖun s─▒ras─▒ geldi─činde onu ├žal─▒┼čt─▒r─▒r.

├ľrnekleyelim

Tekni─či anlatt─▒k, ┼čimdi ise k─▒sa bir ├Ârnek verelim. Zararl─▒ DLLÔÇÖin legal iexplore.exe uygulamas─▒n─▒ APC DLL Injection y├Ântemi ile enjeksiyonuna g├Âz ataca─č─▒z.

Bu teknik, Remote DLL InjectionÔÇÖdaki 4 ad─▒m─▒n ayn─▒s─▒n─▒ uygular. Yani bir handle a├žar, hedef processÔÇÖin memoryÔÇÖsinde yer ay─▒r─▒r, malicious DLLÔÇÖin yolunu ayr─▒lan belle─če kopyalar ve LoadLibrary() APIÔÇÖsinin adresini belirler. Daha sonra ise hedef threadÔÇÖin malicious DLLÔÇÖi y├╝klemeye zorlanmas─▒ i├žin ┼ču ad─▒mlar─▒ izler:

  1. OpenThread() APIÔÇÖsi ile hedef processÔÇÖin threadÔÇÖine bir handle a├žar. Parametrelerinden birisi ise iexplore.exe processÔÇÖinin threadÔÇÖinin IDÔÇÖsidir.

Process Injection 6

OpenThread() APIÔÇÖsinin d├Ân├╝┼č de─čeri iexplore.exe threadÔÇÖinin handleÔÇÖ─▒ olmaktad─▒r.

  1. Malware processÔÇÖi, Internet ExplorerÔÇÖ─▒n threadÔÇÖinin APC kuyru─čundaki APC i┼člevini s─▒ralamak i├žin QueueUserAPC() APIÔÇÖsini ├ža─č─▒r─▒r.

Bunun ilk parametresi malwareÔÇÖ─▒n hedef threadÔÇÖde y├╝r├╝t├╝lmesini istedi─či APC i┼člevinin i┼čaret├žisidir. Yani APC i┼člevi adresi daha ├Ânce belirlenen LoadLibrary() APIÔÇÖsinin kendisidir. ─░kinci parametresi ise hedef processÔÇÖin hedef threadÔÇÖinin handleÔÇÖ─▒d─▒r. ├ť├ž├╝nc├╝ parametresi ise hedef processÔÇÖin memoryÔÇÖsinde yer alana zararl─▒ DLLÔÇÖin tam yolunu i├žeren adrestir. Thread execute i┼člemi yapt─▒─č─▒nda bu adres, LoadLibrary() APIÔÇÖsine parametre olarak iletilmekte ve zararl─▒ DLL execute edilmektedir.

Process Injection 7

G├Ârselde de g├Âr├╝ld├╝─č├╝ ├╝zere 3. Parametre, iexplore.exe processÔÇÖinin process memory adresidir.

Process Injection 8

Adrese bakt─▒─č─▒m─▒zda ise zararl─▒ DLLÔÇÖin tam yolunu g├Ârmekteyiz.

3. Process Hollowing

Ba┼čka bir kod enjeksiyon tekniklerinden birisi olan Process Hollowing, legal bir processÔÇÖin belle─čine zararl─▒ executableÔÇÖ─▒n enjekte edilmesini ama├ž edinir.

Process Hollowing tekni─či, sald─▒rgana bir ├žok avantaj sa─člar. En ├Ânemlisi ise g├╝venlik ve adli analiz ara├žlar─▒ taraf─▒ndan fark edilmemesini sa─člar. ├ľrne─čin legal bir process olan iexplore.exeÔÇÖye Process Hollowing tekni─či olan bir malware ├╝zerinden konu┼čacak olursak, processÔÇÖin yolu legal process olan iexplore.exeÔÇÖnin yolunu g├Âsterecektir. Ama iexplore.exeÔÇÖnin belle─činde ise zararl─▒ executable bar─▒nmaktad─▒r.

HollowingÔÇÖe s├Âzc├╝k bak─▒m─▒ndan genelde ÔÇťkancalamakÔÇŁ denmektedir. Process Hollowing tekni─čini ger├žekle┼čtirecek olan malware, ├Âncelikle legal processÔÇÖi suspend durumda ba┼člat─▒r.

Suspend durumda ba┼člayan legal processÔÇÖin executable sectionÔÇÖ─▒ belle─če y├╝klenmi┼č olur. PEB (Process Environment Block) yap─▒s─▒, memoryÔÇÖe y├╝klenen legal processÔÇÖin tam yolunu i├žerir. PEBÔÇÖin ImageBaseAddress k─▒sm─▒ ise legal processÔÇÖin bellekteki executable sectionÔÇÖ─▒n─▒n hangi adreste oldu─čunun bilgisini tutar.

A┼ča─č─▒daki g├Ârselde malware taraf─▒ndan suspend durumda ba┼člat─▒lan svchost.exe processÔÇÖini g├Âr├╝yoruz. Svchost.exe processÔÇÖi belle─čin 0x01000000 adresine y├╝klenmi┼č durumda.

Daha sonra malware, PEB.ImageBaseAddress k─▒sm─▒na eri┼čmek i├žin bellekteki PEB yap─▒s─▒n─▒n adresini belirler. ImageBaseAddress k─▒sm─▒na eri┼čti─činde ise legal processÔÇÖin memoryÔÇÖdeki base adresini elde eder.

Process Injection 9

PEBÔÇÖin tespitinden sonra malware, GetThreadContext() APIÔÇÖsini ├ža─č─▒r─▒r. GetThreadContext() APIÔÇÖsi belirtilen threadÔÇÖin i├žeri─čini al─▒r. Ve iki adet parametre al─▒r. Bunlardan ilki threadÔÇÖin handleÔÇÖ─▒d─▒r. ─░kinci parametre ise yap─▒n─▒n CONTEXT ad─▒ndaki pointerÔÇÖ─▒d─▒r.

Malware ilk parametreye suspend edilen threadÔÇÖin handleÔÇÖ─▒n─▒, ikinci parametreye ise CONTEXT yap─▒s─▒n─▒n pointerÔÇÖ─▒n─▒ ge├žer. API ├ža─čr─▒s─▒ndan sonra CONTEXT yap─▒s─▒, suspend edilen threadÔÇÖin ba─člam─▒ (kayna─č─▒) ile doldurulur.

Bu CONTEXT yap─▒s─▒ art─▒k ask─▒ya al─▒nan register durumlar─▒n─▒ i├žerir. Malware daha sonra PEB yap─▒s─▒n─▒n i┼čaret├žisini i├žeren CONTEXT._EBX alan─▒n─▒ okur. PEB adresi belirlendikten sonra ise ImageBaseAddress k─▒sm─▒n─▒ okudu─čunu s├Âylemi┼čtik. Bunu yapmas─▒n─▒n amac─▒ da legal executableÔÇÖ─▒n base adresini belirlemekti.

Process Injection 10

Yukar─▒daki g├Ârselde process belle─činin okunma i┼člemi g├Âr├╝lmektedir.

PEB pointerÔÇÖ─▒n─▒ tespit etmek i├žin di─čer bir y├Ântemin NtQueryInformationProcess APIÔÇÖsi oldu─čunu s├Âylemekte de fayda var. Hedef legal processÔÇÖin base adresini belirleyen malware, legal processÔÇÖin executable sectionÔÇÖ─▒n─▒ (├žal─▒┼čt─▒r─▒labilir k─▒sm─▒n─▒) bellekten ay─▒r─▒r (deallocate eder). Bunu da NtUnMapViewofSection() APIÔÇÖsi ile ger├žekle┼čtirir.

Process Injection 11

Yukar─▒daki g├Ârselde ilk parametrenin svchost.exe legal processÔÇÖinin handleÔÇÖ─▒, ikinci parametrenin ise legal processÔÇÖin base adresi oldu─čunu g├Âr├╝yorsunuz. Bu i┼člemden sonra legal processÔÇÖin executable sectionÔÇÖ─▒ bellekten ayr─▒lm─▒┼č, yani unmap edilmi┼č oluyor. Legal processÔÇÖin memoryÔÇÖsinden bo┼čalt─▒lan, deallocate edilen k─▒s─▒mda ise RWX izinlerine sahip yeni bir k─▒s─▒m allocate edilir.

Yeni bellek adresi ├Ânceki process ile ayn─▒ adreste veya farkl─▒ bir adreste allocate edilebilir. Yukar─▒daki g├Ârselde VirtualAllocEx() APIÔÇÖsini memoryÔÇÖde 0x00400000 adresinde ay─▒rma yapmas─▒ i├žin ├ža─č─▒rd─▒─č─▒ g├Âr├╝lmektedir.

Process Injection 12

Yukar─▒daki g├Ârselde 0x00400000 adresinde allocate edilen bellek alan─▒n─▒ g├Ârmektesiniz.

Bellekte istedi─či lokasyondan RWX izinlerinde yer ay─▒rma i┼člemi yapan malware, WriteProcessMemory API()ÔÇÖsini kullanarak y├╝r├╝t├╝lebilir dosyay─▒ ve sectionÔÇÖlar─▒n─▒ 0x00400000 adresindeki ayr─▒lan konuma kopyalar. A┼ča─č─▒daki g├Ârselde bu durum g├Âr├╝lmektedir.

Process Injection 13

Bu i┼člemlerden sonra malware, legal processÔÇÖin PEB.ImageBaseAddress k─▒sm─▒na, art─▒k zararl─▒ i├žerikle dolu olan 0x00400000 adresini yazar.

Process Injection 14

Yukar─▒daki g├Ârselde de art─▒k legal processÔÇÖin PEB.ImageBaseAdress k─▒sm─▒nda yaz─▒l─▒ olan de─čerin 0x01000000ÔÇÖden art─▒k i├žinde zararl─▒ executableÔÇÖ─▒ bar─▒nd─▒ran 0x00400000 adresinin yaz─▒l─▒ oldu─čunu g├Âr├╝yoruz. Yani k─▒sacas─▒ malware, suspend halde olan legal processÔÇÖin start adresini, bellekte legal processÔÇÖin executable k─▒sm─▒na enjekte edilen zararl─▒n─▒n start adresi ile de─či┼čtiriyor.

Bu i┼člemden sonra art─▒k suspend durumda olan processÔÇÖin threadÔÇÖi zararl─▒ k─▒sma i┼čaret etmektedir. Art─▒k sald─▒rgan─▒n yapmas─▒ gereken tek ┼čey suspend edilen threadÔÇÖin **ResumeThread() **APIÔÇÖsi ile suspend durumdan resume durumuna ge├žmesini sa─člay─▒p enjekte edilen kodu (ya da executableÔÇÖ─▒) ├žal─▒┼čt─▒rmas─▒n─▒ izlemektir.

Ayr─▒ca malware, zararl─▒ executableÔÇÖ─▒ hedef i┼čleme enjekte etmek i├žin VirtualAllocEx() ve WriteProcessMemory() tekniklerinden ka├ž─▒nmak amac─▒yla NtMapViewSection() APIÔÇÖsini kullanabilmektedir. Bu APIÔÇÖde Process Hollowing tekni─činde kullan─▒lan APIÔÇÖlerden birisidir.

4. Process Doppelg├Ąnging

Pop├╝ler Code Injection tekniklerinden birisi olan Process Doppelg├Ąnging, ilk olarak 2017 y─▒l─▒nda BlackHatÔÇÖte enSilo ┼čirketinde ├žal─▒┼čan 2 g├╝venlik ara┼čt─▒rmac─▒s─▒ taraf─▒ndan a├ž─▒kland─▒.

Process Doppelg├Ąnging Windows 10 dahil olmak ├╝zere t├╝m Windows s├╝r├╝mlerinde ba┼čar─▒yla ├žal─▒┼čmas─▒ndan dolay─▒ b├╝y├╝k bir ├Âneme sahiptir. Process Hollowing ile benzerlik g├Âsterse, Process HollowingÔÇÖden kesin olarak ayr─▒lan y├Ânleri vard─▒r.

Process Doppelg├Ąnging, ilk ortaya ├ž─▒kt─▒─č─▒ zamanlarda bir ├žok AV ├╝r├╝n├╝ taraf─▒ndan zor tespit edildi─či i├žin malwareÔÇÖlar taraf─▒ndan s─▒k├ža kullan─▒lm─▒┼čt─▒r..

Ayr─▒m Noktas─▒?

Process Hollowing ├Ânce hedef i┼člemi ba┼člat─▒r, daha sonra unmap i┼člemini yapar ve zararl─▒ kodu enjekte eder. Process Doppelg├Ąnging ise process ba┼člamadan ├Ânce imageÔÇÖ─▒n ├╝zerine zararl─▒ kodu yazmaktad─▒r. En ├Ânemli ayr─▒m noktalar─▒ ise bu tekniktir.

Process Doppelg├Ąnging, Windows NTFS i┼člemlerini kullanmaktad─▒r. TFS dosyas─▒n─▒n i┼člemlerine(olu┼čturma, silme, de─či┼čtirme) dayanan bir tekniktir. ─░┼člemsel NTFS, di─čer ad─▒yla TxF, processÔÇÖleri NTFS dosya sistemine entegre eder. Process Doppelg├Ąnging, k├Ât├╝ ama├žl─▒ kodu veya yaz─▒l─▒m─▒ gizlemek i├žin belirli olan bu ├Âzellikleri kullan─▒r. ProcessÔÇÖin ├žal─▒┼čma esnas─▒nda bir dosya olu┼čturdu─čumuzu ve i├žine yazma i┼člemi yapt─▒─č─▒m─▒z─▒ d├╝┼č├╝nelim. WindowsÔÇÖun yap─▒s─▒ gere─či process dosya ├╝zerindeki i┼člemini bitirmeden veya kapatmadan, dosya diskte g├Âr├╝nmeyecektir. ─░┼čte Process Doppelg├ĄngingÔÇÖin avantajlar─▒ndan birisi de bu y├Ântemdir.

Process Doppelg├Ąnging i├žin NTFS i┼člemlerinde 4 adet basamak vard─▒r. Bunlar─▒ ┼ču ┼čekilde s─▒ralayabilir ve a├ž─▒klayabiliriz:

Transact: Bu a┼čamada legal process i┼členir ve ├╝zerine malicious uygulama yaz─▒l─▒r. Bu i┼člemin alt a┼čamalar─▒ bulunmaktad─▒r:

─░lk olarak CreateTransaction() APIÔÇÖsi kullan─▒larak yeni transaction(i┼člem) olu┼čturulur. CreateFileTransacted() APIÔÇÖsi ile i┼člem g├Ârm├╝┼č bir handle elde edilir. Bu handle gereken t├╝m dosya i┼člemleri i├žin kullan─▒labilir. Legal dosyan─▒n ├╝zerine WriteFile() APIÔÇÖsi ile malicious i├žerik yaz─▒l─▒r.

Load: Bu a┼čamada ise 1. A┼čamada ├╝zerine yazma i┼člemi yap─▒larak de─či┼čtirilen dosyadan bir memory b├Âl├╝m├╝ olu┼čturulur. NtCreateSection() APIÔÇÖsi ile i┼člem yap─▒lan dosyadan bir bir b├Âl├╝m olu┼čturulur. Bu b├Âl├╝m, zararl─▒ dosyaya i┼čaret edecektir.

Rollback: Bu a┼čamada ise yap─▒lan t├╝m de─či┼čiklikler geri al─▒n─▒r. Orijinal dosyay─▒ diskte b─▒rak─▒r. RollbackTransaction() APIÔÇÖsi ile bu i┼člemi ger├žekle┼čtirmektedir.

Execution: Bu k─▒s─▒m Process Doppelg├ĄngingÔÇÖin nas─▒l ka├žamakl─▒, sahte ricatl─▒ (geri ├žekilmeli) bir teknik oldu─čunu bize a├ž─▒klayacakt─▒r. ─░lk a┼čamadan itibaren, daha ├Ânce a├ž─▒lan bir processÔÇÖi execute edebilecek, Windows XPÔÇÖden beridir s├╝regelen eski bir komut bulunmaktad─▒r.

  • ─░lk olarak process ve threadler, NtCreateProcessEx() ve NtCreateThreadEx() APIÔÇÖleri kullan─▒larak olu┼čturulur.
  • Process parametreleri RtlCreateProcessParameters() APIÔÇÖsi ile olu┼čturulur.
  • VirtualAllocEx() APIÔÇÖsi ve ├Ânceden kullan─▒lan parametreler kullan─▒larak bo┼č alan ayr─▒l─▒r.
  • Daha sonra ise NtResumeThread() APIÔÇÖsi kullan─▒larak ayr─▒ bir process ba┼člat─▒l─▒r.

Sonu├ž olarak, dosya i├žeri─či geri al─▒nd─▒ktan sonra bile process enjekte edilmi┼č bir halde ba┼člayabilir. Bu nedenle de bir ├žok AV ├╝r├╝n├╝ taraf─▒ndan hi├žbir sorun yokmu┼č gibi g├Âz├╝kecektir.

├ľrne─čin, mimikatz normal bir ┼čekilde ba┼člat─▒ld─▒─č─▒nda AV sistemleri bunu hemen tespit edebildiler. Fakat legal bir processÔÇÖe, Process Doppelg├Ąnging tekni─či ile enjekte edilip ba┼člad─▒─č─▒nda AV sistemleri bunu tespit edemedi.

├ľzet olarak yapmam─▒z gereken ┼čey, zararl─▒ i├žeri─čin tam yolunu vermek iken rollback i┼čleminden sonra PE i├žeri─čine sahip bir b├Âl├╝m├╝ parametre olarak alan Zw/NtCreateProcessEx() APIÔÇÖsi vard─▒r. Bu APIÔÇÖyi kullanarak dosyas─▒z bir ┼čekilde injection yapm─▒┼č gibi oluruz ve i┼čletim sistemi sadece dosya kapand─▒─č─▒nda de─či┼čikleri farkedece─či i├žin bunu alg─▒layamaz.

Process Injection 15

Yukar─▒daki g├Ârselde NtCreateProcessEx() APIÔÇÖsinin yap─▒s─▒n─▒ g├Ârmektesiniz.

Bu teknik tamamen gizli de─čildir, ve tespiti de snapshot y├Ântemleri kullan─▒larak ve kar┼č─▒la┼čt─▒rmalar ile yap─▒labilir. Sonu├žta Remote bir thread olu┼čturdu─ču i├žin AV sistemlerini tetikleyebilir.

2017 y─▒l─▒nda ortaya ├ž─▒km─▒┼č bir teknik olarak g├╝n├╝m├╝zdeki AV sistemlerinin bu tekni─či tespit edebilece─čini s├Âyleyebiliriz.

5. Atom Bombing Injection

Process Doppelg├Ąnging kod enjeksiyon tekni─činin ard─▒ndan Atom Bombing Injection tekni─čine geliyoruz. Atom Bombing tekni─čini, yine ad─▒n─▒ az ├Ânceki Process Doppelg├Ąnging tekni─činden de hat─▒rlayaca─č─▒n─▒z enSilo ┼čirketinde ├žal─▒┼čan g├╝venlik ara┼čt─▒rmac─▒lar─▒ bulmu┼čtur.

Atom Bombing tekni─či WindowsÔÇÖun t├╝m s├╝r├╝mlerinde ├žal─▒┼čmaktad─▒r. Bir bug veya zafiyet de─čildir, aksine WindowsÔÇÖun do─čas─▒ gere─či ortaya ├ž─▒kan bir tekniktir. Bundan dolay─▒ da herhangi bir yama s├Âz konusu de─čildir.

Ortaya ├ž─▒kmas─▒ndan sonra art─▒k AV ├╝r├╝nleri taraf─▒ndan tespiti de yap─▒labilmektedir. Bu teknik ise 2018 y─▒l─▒nda ortaya ├ž─▒km─▒┼čt─▒r.

Atom Bombing, ad─▒n─▒ WindowsÔÇÖun atom tablolar─▒ndan almaktad─▒r. Atom tablolar─▒, processÔÇÖler aras─▒nda payla┼č─▒lan sistem belle─čini kullanarak veri payla┼č─▒m─▒/de─či┼čimi gibi i┼člemleri ger├žekle┼čtirir. Atom tablolar─▒n─▒ Windows ┼ču ┼čekilde tan─▒mlamaktad─▒r:

ÔÇťAtom tablosu, stringsÔÇÖleri ve kar┼č─▒l─▒k gelen tan─▒mlay─▒c─▒lar─▒ saklayan sistem tan─▒ml─▒ bir tablodur. Bir uygulama, bir stringÔÇÖi atom tablosuna yerle┼čtirir ve o stringÔÇÖe eri┼čmek i├žin 16 bitlik bir tam say─▒ al─▒r. Atom tablosuna yerle┼čtirilen bu stringÔÇÖe atom ad─▒ verilir.ÔÇŁ

Bu a├ž─▒klamadan yola ├ž─▒karak bu tekni─čin arkas─▒nda yatan plan─▒ da az ├žok kurguluyor gibiyiz. Malware processÔÇÖi legal bir string yerine zararl─▒ kodu atom olarak olu┼čturuyor ve hedef olan legal processÔÇÖin bu olu┼čturulan zararl─▒ atomÔÇÖu y├╝kleyerek ├žal─▒┼čt─▒rmas─▒n─▒ sa─čl─▒yor.

Process Injection 16

Yukar─▒daki g├Ârselde Atom Bombing tekni─činin ├žal─▒┼čma yap─▒s─▒ g├Âsterilmi┼čtir. Atom Bombing tekni─činin nas─▒l ger├žekle┼čti─čini anlamak i├žin teknik olarak a├ž─▒klayal─▒m:

Malware (zararl─▒ process), GlobalAddAtom() ile zararl─▒ kodu string bi├žiminde atom tablosuna yerle┼čtirir. Atom tablosu sistemde ├žal─▒┼čan her process taraf─▒ndan eri┼čilebilir durumdad─▒r.

APC(Asynchronous Procedure Call) kullanarak, GlobalGetAtomName() ile zararl─▒ kodu atom tablosundan legal processÔÇÖin bellek alan─▒na kopyalar. APC kullan─▒ld─▒─č─▒ i├žin bu teknik alterable durumda olan herhangi bir processÔÇÖin threadÔÇÖi taraf─▒ndan yap─▒labilir.

Daha sonras─▒nda ise sistemi yeni bir executable bellek allocate etmeye zorlar. Bellek allocate i┼čleminden sonra zararl─▒ kodu ayr─▒lan bellek alan─▒na kopyalar ve ├žal─▒┼čt─▒r─▒r.

Yukar─▒daki ad─▒mlarda da teknik detay─▒n─▒ a├ž─▒klad─▒k. Bu tekni─čin hakk─▒nda ├Ânemli olan baz─▒ k─▒s─▒mlar mevcuttur.

Atom Bombing, bir Privilege Escalation(yetki y├╝kseltme) sa─člamaz. AV ├╝r├╝nleri taraf─▒ndan beyaz listede olan processÔÇÖleri hedef alarak bypass yapar.

ProcessÔÇÖin ├Âzel verilerine eri┼čmeye imkan sa─člar. Yani belirli bir processÔÇÖi hedef ald─▒─č─▒n─▒zda, (Web Browser gibi), web i├žeri─čini de─či┼čtirebilir, taray─▒c─▒daki parolalara eri┼čebilirsiniz. Ekran g├Âr├╝nt├╝s├╝ alabilirsiniz. Bu tamamen hangi processÔÇÖi hedef ald─▒─č─▒n─▒za ba─čl─▒ olmak ile birlikte sald─▒rgana ├žok geni┼č imkanlar sunmaktad─▒r.

Ger├žek bir ├Ârnek vermek gerekirse Dridex bankac─▒l─▒k trojan─▒, bu teknik ortaya ├ž─▒kt─▒ktan sonra Atom BombingÔÇÖi kullanmaya ba┼člam─▒┼čt─▒r. Bilin bakal─▒m neden ­čÖé

Atom Bombing tekni─činin APCÔÇÖyi kulland─▒─č─▒n─▒ tekrar hat─▒rlayal─▒m. APC hakk─▒nda ├žok az bilgi mevcut. Ama ├Ârneklendirmek gerekirse normal i┼člevinde ilerleyen ba┼čka bir processÔÇÖin threadÔÇÖini zararl─▒ kodu ├žal─▒┼čt─▒rmak i├žin MalwareÔÇÖlar taraf─▒ndan kullan─▒lmaktad─▒r.

Sizlere en ├žok ses getiren, ilgin├ž ve i┼če yarar Process Injection tekniklerini anlatt─▒m. Art─▒k svchost.exeÔÇÖnin legal bir sistem uygulamas─▒ oldu─čunu ve zararl─▒ yaz─▒l─▒mlar─▒n da u─črak yeri oldu─čunu biliyoruz ­čÖé

Ba┼čka bir teknik makalede g├Âr├╝┼čmek ├╝zereÔÇŽ

Yararlan─▒lan Kaynaklar

[1] https://www.elastic.co/blog/ten-process-injection-techniques-technical-survey-common-and-trending-process

[2] https://www.deepinstinct.com/2019/09/15/malware-evasion-techniques-part-1-process-injection-and-manipulation

[3] https://kaganisildak.com/2019/02/10/process-doppelganging/