macOS Electron Applications Injection
Temel Bilgiler
Electron nedir bilmiyorsanız burada birçok bilgi bulabilirsiniz. Ama şimdilik sadece şunu bilin ki Electron node çalıştırır. Ve node'un başka kodları çalıştırmasına izin veren bazı parametreleri ve çevresel değişkenleri vardır.
Electron Sigortaları
Bu teknikler bir sonraki aşamada tartışılacak, ancak son zamanlarda Electron, bunları önlemek için çeşitli güvenlik bayrakları ekledi. Bunlar Electron Sigortaları ve bunlar macOS'taki Electron uygulamalarının keyfi kod yüklemesini önlemek için kullanılanlar:
RunAsNode
: Devre dışı bırakıldığında, kod enjekte etmek için çevresel değişkenELECTRON_RUN_AS_NODE
kullanımını engeller.EnableNodeCliInspectArguments
: Devre dışı bırakıldığında,--inspect
,--inspect-brk
gibi parametreler dikkate alınmaz. Bu şekilde kod enjekte etmeyi önler.EnableEmbeddedAsarIntegrityValidation
: Eğer etkinse, yüklenenasar
dosyası macOS tarafından doğrulanır. Bu dosyanın içeriğini değiştirerek kod enjeksiyonunu önler.OnlyLoadAppFromAsar
: Bu etkinse,app.asar
,app
ve son olarakdefault_app.asar
sırasıyla aranmak yerine sadece app.asar'ı kontrol eder ve kullanır, böyleceembeddedAsarIntegrityValidation
sigortası ile birleştirildiğinde doğrulanmamış kod yüklemenin imkansız olduğunu garanti eder.LoadBrowserProcessSpecificV8Snapshot
: Etkinse, tarayıcı işlemi V8 anlık görüntüsü içinbrowser_v8_context_snapshot.bin
adlı dosyayı kullanır.
Kod enjeksiyonunu önlemeyen başka ilginç bir sigorta ise:
EnableCookieEncryption: Etkinse, diskteki çerez deposu işletim sistemi düzeyindeki şifreleme anahtarları kullanılarak şifrelenir.
Electron Sigortalarını Kontrol Etme
Bu bayrakları bir uygulamadan kontrol edebilirsiniz:
Electron Sigortalarını Değiştirme
Belgelerde belirtildiği gibi, Electron Sigortalarının yapılandırması genellikle Electron ikili dosyası içinde yapılandırılmıştır ve içinde dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX
dizesini içerir.
MacOS uygulamalarında bu genellikle application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework
içinde bulunur.
RCE Kod Eklemek için Electron Uygulamaları
Bir Elektron Uygulamasının kullandığı harici JS/HTML dosyaları olabilir, bu nedenle bir saldırgan bu dosyalara kod enjekte edebilir ve bu dosyaların imzası kontrol edilmeyeceğinden uygulamanın bağlamında keyfi kodu çalıştırabilir.
Ancak, şu anda 2 kısıtlama bulunmaktadır:
Bir Uygulamayı değiştirmek için
kTCCServiceSystemPolicyAppBundles
iznine ihtiyaç vardır, bu nedenle varsayılan olarak artık bu mümkün değildir.Derlenmiş
asap
dosyasının genellikle füzeembeddedAsarIntegrityValidation
veonlyLoadAppFromAsar
etkin
olarak ayarlanmıştır.
Bu saldırı yolunu daha karmaşık (veya imkansız) hale getirir.
kTCCServiceSystemPolicyAppBundles
gereksinimini atlamak mümkündür, uygulamayı başka bir dizine (örneğin /tmp
) kopyalayarak, klasörü app.app/Contents
olarak yeniden adlandırarak, asar dosyasını kötü niyetli kodunuzla değiştirerek, dosyayı tekrar app.app/Contents
olarak adlandırarak ve çalıştırarak.
Asar dosyasından kodu açabilirsiniz:
Ve değiştirdikten sonra tekrar paketleyin:
ELECTRON_RUN_AS_NODE
ile Uzaktan Kod Çalıştırma (RCE)
ELECTRON_RUN_AS_NODE
ile Uzaktan Kod Çalıştırma (RCE)Belgelere göre, bu çevre değişkeni ayarlandığında işlem normal bir Node.js işlemi olarak başlatılacaktır.
Eğer RunAsNode
füzyonu devre dışı bırakılmışsa, ELECTRON_RUN_AS_NODE
ortam değişkeni yok sayılacak ve bu çalışmayacaktır.
Uygulama Plist'ten Enjeksiyon
Burada önerildiği gibi, bu ortam değişkenini bir plist'te kötüye kullanarak kalıcılığı sürdürebilirsiniz:
NODE_OPTIONS
ile Uzaktan Kod Çalıştırma (RCE)
NODE_OPTIONS
ile Uzaktan Kod Çalıştırma (RCE)Payload'ı farklı bir dosyada saklayıp çalıştırabilirsiniz:
Eğer EnableNodeOptionsEnvironmentVariable
kilidi devre dışı bırakılmışsa, uygulama başlatıldığında NODE_OPTIONS ortam değişkenini ihmal edecektir, ancak ELECTRON_RUN_AS_NODE
ortam değişkeni ayarlanmışsa dikkate alınacaktır, bu durumda RunAsNode
kilidi devre dışı bırakılmışsa da ihmal edilecektir.
ELECTRON_RUN_AS_NODE
ayarlamazsanız, hata ile karşılaşırsınız: Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.
Uygulama Plist'ten Enjeksiyon
Bu ortam değişkenini bir plist'te kötüye kullanarak kalıcılığı sürdürebilirsiniz, aşağıdaki anahtarları ekleyerek:
Denetim yaparak Uzaktan Kod Yürütme (RCE)
Bu kaynağa göre, Electron uygulamasını --inspect
, --inspect-brk
ve --remote-debugging-port
gibi bayraklarla çalıştırırsanız, bir hata ayıklama bağlantı noktası açılacaktır böylece ona bağlanabilirsiniz (örneğin Chrome'dan chrome://inspect
üzerinden) ve üzerine kod enjekte edebilirsiniz veya hatta yeni işlemler başlatabilirsiniz.
Örneğin:
Eğer EnableNodeCliInspectArguments
füzesi devre dışı bırakılmışsa, uygulama başlatıldığında --inspect
gibi node parametrelerini ihmal edecektir ancak ELECTRON_RUN_AS_NODE
ortam değişkeni ayarlandığında bu da ihmal edilecektir eğer RunAsNode
füzesi devre dışı bırakılmışsa.
Ancak, hala electron parametresi --remote-debugging-port=9229
kullanabilirsiniz ancak önceki yük işlemi diğer işlemleri yürütmek için çalışmayacaktır.
--remote-debugging-port=9222
parametresini kullanarak Electron Uygulamasından geçmiş (GET komutları ile) veya tarayıcının içinde şifrelenmiş olan çerezlerin (çünkü tarayıcı içinde şifrelenmiş ve onları verecek bir json uç noktası bulunmaktadır) bazı bilgileri çalmak mümkündür.
Bunu burada ve burada nasıl yapacağınızı öğrenebilir ve otomatik araç WhiteChocolateMacademiaNut veya basit bir betik kullanabilirsiniz:
Bu blog yazısında, bu hata ayıklama işlemi, başsız bir chrome'un keyfi dosyaları keyfi konumlara indirmesini sağlamak için kötüye kullanılmıştır.
Uygulama Plist'ten Enjeksiyon
Bu çevresel değişkeni bir plist'te kötüye kullanabilir ve kalıcılığı sürdürmek için şu anahtarları ekleyebilirsiniz:
Eski Sürümleri Kötüye Kullanarak TCC Atlatma
macOS'taki TCC daemonı uygulamanın yürütülen sürümünü kontrol etmez. Dolayısıyla, Electron uygulamasına kod enjekte edemezseniz önceki tekniklerden herhangi biriyle, uygulamanın önceki bir sürümünü indirip üzerine kod enjekte edebilirsiniz çünkü hala TCC ayrıcalıklarını alacaktır (Güven Önbelleği engellemezse).
JS Olmayan Kodları Çalıştırma
Önceki teknikler size Electron uygulamasının işlemi içinde JS kodunu çalıştırmanıza izin verecektir. Ancak, çocuk işlemler aynı kum havuzu profili altında çalışır ve TCC izinlerini miras alırlar. Bu nedenle, örneğin kameraya veya mikrofona erişmek için ayrıcalıkları kötüye kullanmak istiyorsanız, sadece işlem içinden başka bir ikili dosyayı çalıştırabilirsiniz.
Otomatik Enjeksiyon
electroniz3r aracı, yüklü olan savunmasız electron uygulamalarını bulmak ve üzerlerine kod enjekte etmek için kolayca kullanılabilir. Bu araç --inspect
tekniğini kullanmaya çalışacaktır:
Kendiniz derlemeniz ve şu şekilde kullanmanız gerekmektedir:
Referanslar
Last updated