← Back to list

MITRE ATT&CK Techniques: Create or Modify System Process — Windows Service (T1543.003)

MITRE ATT&CK teknikleri arasında yer alan Create or Modify System Process (T1543) ve alt tekniği Windows Service (T1543.003)…

Selin Uluca · 2025-03-15 14:40 · 0 claps · 3.3 min read
#mitre-attack #malware #windows-services #privilege-escalation #kernel-driver
Open on Medium ↗
Wiki topics: 🔒 · Cybersecurity

MITRE ATT&CK Techniques: Create or Modify System Process — Windows Service (T1543.003)

MITRE ATT&CK teknikleri arasında yer alan Create or Modify System Process (T1543) ve alt tekniği Windows Service (T1543.003), saldırganların sistem üzerinde kalıcılık veya yetki yükseltme sağlamak amacıyla kötü niyetli işlemler gerçekleştirmesine olanak tanır.

Windows servisleri, kullanıcı etkileşimi olmadan arka planda çalışması amaçlanan programlardır. Servisler, Administrative yetkilerle çalıştırılabilirler.

Windows servislerinin kullanılması, sistem boot olduğunda zararlı programı otomatik başlatabildiğinden kalıcılık (persistence) sağlanabilir aynı zamanda Windows servisleri ile kernel mode bir driver başlatılabildiğinden yetki yükseltme (privilege escalation) işlemi de yapılabilir.

Bu teknik, mevcut bir servisin konfigürasyonlarının değiştirilmesi yoluyla ya da yeni bir servis oluşturularak uygulanabilir. Konfigürasyon değişiklikleri:

  • sc.exe (Service Control, Windows’ta servisleri yönetmek için kullanılır) ile,
  • Registry’lerde tutulan servis bilgileri ile veya
  • doğrudan Windows API’ları ile yapılabilir.

Bu tekniği bir örnekle daha somut hale getirebiliriz: Zararlı bir yazılım, bir kernel driver’ı Windows servisi olarak sisteme yükleyerek, zararlı işlemleri kernel seviyesinde gerçekleştirebilir. Örneğin bu driver;

  • Wiper attack’larında (basitçe hard diski bozan saldırılar) kullanılabilir, 2022 yılında Ukrayna’yı hedef alan DriveSlayer zararlısı temelde bu saldırı yöntemini kullanmıştır.
  • bir sistemde zararlı etkinliğin varlığını gizlemek için Rootkit olarak kullanılabilir,
  • ya da kernel seviyesinde çalıştığı için antivirüsleri kapatıp başka zararlı işlemler yapabilir.

Ancak normal şartlarda bir driver imzasız olduğunda Windows bunu yüklemeye izin vermez. Bu durumlar için de zararlı yazılım yazarları, BYOVD (Bring Your Own Vulnerable Driver) tekniğini kullanabiliyorlar. Bu teknik; daha önce legal olarak kullanılmış driver’larda exploit bulup (ya da exploit bulunmuş driver), bu driverı sistemde çalıştırıp, exploit’i kullanarak zararlı işlemler yapılabilmesini sağlayan bir tekniktir.

Ancak ben örnek kodu, Windows’un test amaçlı imzasız driver yükleme özelliğini aktifleştirerek çalıştırdım.

Bu örneği simüle etmek amacıyla geliştirdiğim C++ kodunu basitçe anlatacağım:

bool EnablePrivilege(LPCWSTR privilege) { 
    HANDLE hToken;
    TOKEN_PRIVILEGES tp; 
    LUID luid; 

    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
        std::wcerr << L"  !! OpenProcessToken failed: " << GetLastError() << std::endl;
        return false;
    }

    if (!LookupPrivilegeValueW(NULL, privilege, &luid)) {  
        std::wcerr << L"   !!  LookupPrivilegeValueW failed: " << GetLastError() << std::endl;
        CloseHandle(hToken);    
        return false;
    }

    tp.PrivilegeCount = 1;  
    tp.Privileges[0].Luid = luid;   
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 

    if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) { 
        std::wcerr << L"  !!  AdjustTokenPrivileges failed: " << GetLastError() << std::endl;
        CloseHandle(hToken);
        return false;
    }

    CloseHandle(hToken);
    return true;   
}

Öncelikle yukarıdaki fonksiyon ile şu anda çalıştırdığımız process’in (driver’ı yüklemek isteyen program) handle’ı sayesinde token’ını “TOKEN_ADJUST_PRIVILEGES-token’daki ayrıcalıkları değiştirme yetkisi” ve “TOKEN_QUERY-token’daki bilgileri sorgulama yetkisi” bayrakları ile elde edip, bu token’ın driver yüklemek için gerekli privilege’ını yani “SeLoadDriverPrivilege” aktifleştiriyorum. Burada kullandığım LookupPrivilegeValueW() API’ı, enable edilmek istenen privilege’in LUID değerini yani ID’sini döndürür. Buradaki kritik nokta, AdjustTokenPrivileges() API’ı daha önce halihazırda tanımlı privilege’ları değiştirebilir.

bool CreateDriverService(LPCWSTR serviceDriver, LPCWSTR driverPath) { 
    SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);    
    if (!hSCManager) {
        std::wcerr << L"  !!  OpenSCManager failed: " << GetLastError() << std::endl;
        return false;
    }

     SC_HANDLE hService = CreateServiceW(
        hSCManager,
        serviceDriver,
        serviceDriver,
        SERVICE_ALL_ACCESS,
        SERVICE_KERNEL_DRIVER,
        SERVICE_AUTO_START,  
        SERVICE_ERROR_IGNORE,
        driverPath,
        NULL, NULL, NULL, NULL, NULL
    );

    if (!hService) {
        std::wcerr << L"  !!  CreateServiceW failed: " << GetLastError() << std::endl;
        CloseServiceHandle(hSCManager);
        return false;
    }

    CloseServiceHandle(hService);
    CloseServiceHandle(hSCManager);
    return true;
}

Daha sonrasında ise driver’ı yükleyecek servisi oluşturuyorum. Buradaki OpenScManager() API’ı ile SCM (Service Control Manager) yani sistemdeki tüm servisleri yöneten birime bağlanıyorum.

CreateServiceW() API’na verdiğim bazı parametreler önemli: “SERVICE_KERNEL_DRIVER” parametresi ile servisin kernel driver’ı olduğunu ve “SERVICE_AUTO_START” parametresi ile de servisin sistem her başladığında otomatik açılması gerektiğini belirtiyorum.

bool StartDriverService(LPCWSTR serviceName) {
    SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
    if (!hSCManager) {
        std::wcerr << L"  !!  OpenSCManager failed: " << GetLastError() << std::endl;
        return false;
    }

    SC_HANDLE hService = OpenServiceW(hSCManager, serviceName, SERVICE_START);
    if (!hService) {
        std::wcerr << L"  !!  OpenServiceW failed: " << GetLastError() << std::endl;
        CloseServiceHandle(hSCManager);
        return false;
    }

    if (!StartServiceW(hService, 0, NULL)) {
        std::wcerr << L" !! StartServiceW failed: " << GetLastError() << std::endl;
        CloseServiceHandle(hService);
        CloseServiceHandle(hSCManager);
        return false;
    }

    std::wcout << L"Service started successfully." << std::endl;
    CloseServiceHandle(hService);
    CloseServiceHandle(hSCManager);
    return true;
}

Yukarıdaki fonksiyonda ise servisi başlatıyorum. Yine öncelikle yukarıda yaptığım gibi SCM’ye bağlanıyorum. Daha sonrasında StartServiceW() API’ı ile servisi başlatıyorum.

Son olarak main fonksiyonunda gerekli path ve parametrelerle fonksiyonları çağırıyorum ve kernel driver servisi oluşturulup başlatılmış oluyor.

Bu servis bir kernel-mode driver olduğu için, genellikle services.msc gibi standart araçlarda görünmez. Bunun yerine Registry üzerinde kontrol edilebilir ya da “sc query SERVIS_ADI” komutu ile durumu doğrulanabilir.

Bu yazıda, saldırganların Windows servislerini kullanarak nasıl kalıcılık ve yetki yükseltme sağlayabileceğini örneklerle ele almaya çalıştım. Böylece Windows servislerinin saldırı yüzeyindeki rolünü ve bu tekniğin nasıl istismar edilebildiğini daha net görebileceğimizi düşünüyorum.

Okuduğunuz için teşekkür ederim.

Her türlü yorum ve geri bildirim için profilimdeki mail adresim üzerinden bana ulaşabilirsiniz ☺☺

Yararlandığım kaynaklar:

[embed]CrowdStrike Protects from Wiper Malware Used in Ukraine Attacks The CrowdStrike Falcon® platform provides continuous protection from the wiper-style malware used to target Ukraine by…www.crowdstrike.com

[embed]Create or Modify System Process: Windows Service Adversaries may create or modify Windows services to repeatedly execute malicious payloads as part of persistence. When…attack.mitre.org

[embed]Windows Documentation Information for Windows application developers, hardware developers, and IT pros.learn.microsoft.com

[embed]Newest Questions Stack Overflow | The World's Largest Online Community for Developersstackoverflow.com


메타데이터
post_id
8e4e2ae06c14
slug
mitre-att-ck-techniques-create-or-modify-system-process-windows-service-t1543-003-8e4e2ae06c14
url
https://medium.com/@selin.uluca/mitre-att-ck-techniques-create-or-modify-system-process-windows-service-t1543-003-8e4e2ae06c14
canonical_url
https://medium.com/@selin.uluca/mitre-att-ck-techniques-create-or-modify-system-process-windows-service-t1543-003-8e4e2ae06c14
author_url
https://medium.com/@selin.uluca
status
ok
fetched_at
2026-08-05 08:35:33