ZeroLogon, Tom Tervoot tarafından keşfedilen bir zafiyet olup, CVE-2020-1472 kaydı ile kritik (CVSS skoru 10.0) olarak yayınlanmıştır. Netlogon Remote Protokolü olarak bilinen (MS-NPRC) protokolünü kullanarak domain controller üzerinde bulunan güvenlik açığı sayesinde saldırgana ayrıcalıklı yetki yükseltmesini veren bir zafiyettir. Zafiyetin kullanılabilmesine güvenilir olmayan AES-CFB8 ile yapılan şifrelemenin sebebiyet verdiği teknik detaylarında ortaya çıkmıştır.
Netlogon üzerinde benzer bir zafiyet daha önce 2019 yılında CVE-2019-1424 kaydı ile bildirilmiş olup, man-in-the-middle atağı ile zafiyetin sömürülebildiği yine Tom Tervoot tarafından yayınlanmıştır. Ancak ilk zafiyeti tespit eden Tom Tervoot, detaylı araştırması neticesinde Netlogon’ın SMB ve TCP protokolleri ile olan bağı nedeniyle sunucuya yapılabilecek dışarıdan isteklerinde Netlogon üzerinde başarılı olacağını ortaya çıkarmıştır.
Netlogon Remote Protokol
Netlogon remote protokol, kullanıcı ve makine bilgilerinin DC üzerinde kontrol edilmesini sağlayan bir RPC (Remote Protocol Call) arabirimidir. Ayrıca RPC arabirimi ile BDC’lerin veri tabanı çoğaltılabilmektedir. DC ile istemci (client) bağlantısının yanı sıra ilgili protokol sayesinde DC’ler arasında da kullanılabilmekte ve domain isimlerinin kontrol ve onaylaması yapılabilmektedir.
İstemci ve DC’nin haberleşmesi, istemciye ait parolanın hashi ile oluşturulan bir güvenli kanal üzerinden başlar.
- İstemci sunucuya bir sorgulama oluşturur ve bunu NetrServerReqChallenge üzerinden sunucuya gönderir.
- Sunucu, istemcinin sorgusunu kabul ettikten sonra NetrServerReqChallenge üzerinden yanıtını iletir. Bu noktada istemci ve sunucu arasında sorgulamalar tamamlanmış olur.
- İstemci, oturum anahtarını hesaplar ve NetrServerAuthenticate, NetrServerAuthenticate2 veya NetrServerAuthenticate3 sorgusu ile sunucuya yönlendirir.
- Sunucu NetrServerAuthenticate, NetrServerAuthenticate2 veya NetrServerAuthenticate3 çağrısını alır ve istemcinin Netlogon kimlik bilgilerini doğrular. Bu noktada karşılıklı doğrulama tamamlanır.
- İstemci, NetrLogonGetCapabilities yöntemi ile sunucuya ileterek daha fazla şifrelenmiş veri ile iletişim kurulmasını ister.
- Sunucu istemciyi onaylar.
Zafiyetin Kullanım Senaryosu
AES-CFB8 ile yapılan şifrelemenin normalde 8 baytlık olması beklenir. Ancak bu şifrelemede 16 bayt kullanılarak kalan 8 baytın “0” olması nedeniyle bir saldırgan 8 adet 0’dan oluşan bir sorguyu sunucuya ilettiğimizde oturumu doğrulayacaktır.
NetrServerAuthenticate3 içerisinde bulunan “ClientCredential” bilgisine 8 adet 0 girerek sunucuya doğrulama gönderilir. Sunucu AES şifresindeki zafiyet nedeniyle girilen değeri döndürerek başarılı sorgu olarak kabul eder.
Bu noktada önemli olan oturum anahtarını bilmiyor olmamızdan ötürü olarak bir şeyi değiştirememekteyiz. Ancak eğer ComputeNetlogonCredential değerini 0’a eşitlersek bu noktada oturum anahtarına da ihtiyacımız kalmayacaktır. ComputeNetlogonCredential değerinin ClientStoredCredential + Timestamp değerleri ile hesaplanabildiği bilinmektedir. Bu noktada zaman (Timestamp) olarak 1 Ocak 1970 ayarlarsak ki bunun için 0 yazmak yeterlidir. Bu durumda bize ComputeNetlogonCredential (0) = 0 dönüşünü sağlar ve oturumumuzu doğrular.
Bu noktada NetrServerPasswordSet2 üzerinden AD’nin şifresi değiştirilebilir.
Nasıl tespit edilir?
Microsoft tarafından yayınlanan güvenlik güncellemesinin sunucularınıza yüklenmesi büyük öneme sahiptir. Ancak bazı sunucularınızdan Microsoft desteğini çektiyse bu noktada zafiyete karşı açık hale gelebilir. Bu durumda saldırıyı tespit edebilmeliyiz. Bununla ilgili birden çok kaynak ve yöntem olduğu görülmektedir.
4742 eventID’si ve anonymous logon kullanıcı adı ile oluşan olay günlüklerini kontrol etmek. Bu konuyu IBM SIEM ürünü olan QRadar üzerinde Jose Bravo güzel bir şekilde göstermiş.
4662 eventID’si ile DCSync ataklarını tespit edebilirsiniz. Aşağıda paylaşılan GUID’lerin kontrolleri ile saldırı tespiti yapmanız mümkündür.
- GUID: 1131f6aa-9c07-11d1-f79f-00c04fc2dcd2(DS-Replication-Get-Changes)
- GUID: 1131f6ad-9c07-11d1-f79f-00c04fc2dcd2(DS-Replication-Get-Changes-All)
- GUID: 89e95b76-444d-4c62-991a-0facbeda640c(DS-Replication-Get-Changes-In-Filtered-Set)
Bu durumlara ek olarak Microsoft tarafından paylaşılan uyarılarda 5 farklı event ID paylaşılmıştır.
- Güvenlik açığı bulunan Netlogon güvenli kanal bağlantısı yapılmaya çalışıldığı için bir bağlantı reddedildiğinde günlüğe kaydedilen olaylar:
5827(makine hesabı)
5828(güvenlik hesabı)
- Hesabın “Etki alanı denetleyicisi: Güvenlik açığı bulunan Netlogon güvenli kanal bağlantılarına izin ver” grup ilkesine eklendiği için bir bağlantıya izin verildiğinde günlüğe kaydedilen olaylar :
5830(makine hesabı)
5831(güvenlik hesabı)
- İlk sürümde bir bağlantıya izin verildiğinde günlüğe kaydedilen ve DC uygulama modunda reddedilecek olaylar:
5829(makine hesabı)
Kaynaklar:
1- https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nrpc/ff8f970f-3e37-40f7-bd4b-af7336e4792f
2- https://www.cynet.com/zerologon
3- https://www.secura.com/pathtoimg.php?id=2055
4- https://blog.zsec.uk/zerologon-attacking-defending/
5- https://www.youtube.com/watch?v=6wI1E3S1xfs
6- https://support.microsoft.com/en-us/help/4557222/how-to-manage-the-changes-in-netlogon-secure-channel-connections-assoc