macOS Electron Applications Injection
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
Electron'un ne olduğunu bilmiyorsanız burada çok fazla bilgi bulabilirsiniz. Ama şimdilik sadece Electron'un node çalıştırdığını bilin. Ve node'un belirtilen dosya dışında başka kodlar çalıştırmak için kullanılabilecek bazı parametreleri ve env değişkenleri vardır.
Bu teknikler bir sonraki bölümde tartışılacak, ancak son zamanlarda Electron birkaç güvenlik bayrağı ekledi. Bunlar Electron Füzeleri ve bunlar macOS'taki Electron uygulamalarının rastgele kod yüklemesini önlemek için kullanılanlardır:
RunAsNode
: Devre dışı bırakıldığında, kod enjeksiyonu için ELECTRON_RUN_AS_NODE
env değişkeninin kullanılmasını engeller.
EnableNodeCliInspectArguments
: Devre dışı bırakıldığında, --inspect
, --inspect-brk
gibi parametreler dikkate alınmayacaktır. Bu şekilde kod enjeksiyonunu önler.
EnableEmbeddedAsarIntegrityValidation
: Etkinleştirildiğinde, yüklenen asar
dosyası macOS tarafından doğrulanacaktır. Bu şekilde bu dosyanın içeriğini değiştirerek kod enjeksiyonunu önler.
OnlyLoadAppFromAsar
: Bu etkinleştirildiğinde, yüklemek için şu sırayı aramak yerine: app.asar
, app
ve son olarak default_app.asar
. Sadece app.asar'yı kontrol edecek ve kullanacak, böylece embeddedAsarIntegrityValidation
füzesi ile birleştirildiğinde doğrulanmamış kodun yüklenmesi imkansızdır.
LoadBrowserProcessSpecificV8Snapshot
: Etkinleştirildiğinde, tarayıcı süreci V8 anlık görüntüsü için browser_v8_context_snapshot.bin
adlı dosyayı kullanır.
Kod enjeksiyonunu önlemeyecek başka ilginç bir füze:
EnableCookieEncryption: Etkinleştirildiğinde, disk üzerindeki çerez deposu OS düzeyinde kriptografi anahtarları kullanılarak şifrelenir.
Bir uygulamadan bu bayrakları kontrol edebilirsiniz:
As the docs mention, the configuration of the Electron Fuses are configured inside the Electron binary which contains somewhere the string dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX
.
In macOS applications this is typically in application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework
Bu dosyayı https://hexed.it/ adresinde yükleyebilir ve önceki dizeyi arayabilirsiniz. Bu dizenin ardından, her bir sigortanın devre dışı mı yoksa etkin mi olduğunu gösteren ASCII'de "0" veya "1" sayısını görebilirsiniz. Sigorta değerlerini değiştirmek için hex kodunu (0x30
0
ve 0x31
1
'dir) değiştirin.
Bu baytları değiştirilmiş olarak bir uygulamanın Electron Framework
ikili dosyasını üst üste yazmaya çalışırsanız, uygulama çalışmayacaktır.
Bir Electron Uygulamasının kullandığı harici JS/HTML dosyaları olabilir, bu nedenle bir saldırgan, imzasının kontrol edilmeyeceği bu dosyalara kod enjekte edebilir ve uygulama bağlamında rastgele kod çalıştırabilir.
Ancak, şu anda 2 sınırlama vardır:
Bir Uygulamayı değiştirmek için kTCCServiceSystemPolicyAppBundles
izni gerekir, bu nedenle varsayılan olarak bu artık mümkün değildir.
Derlenmiş asap
dosyası genellikle embeddedAsarIntegrityValidation
ve
onlyLoadAppFromAsar
sigortalarını etkin
olarak içerir.
Bu saldırı yolunu daha karmaşık (veya imkansız) hale getirir.
kTCCServiceSystemPolicyAppBundles
gereksinimini, uygulamayı başka bir dizine (örneğin /tmp
) kopyalayarak, klasörü app.app/Contents
'ı app.app/NotCon
olarak yeniden adlandırarak, kötü niyetli kodunuzla asar dosyasını değiştirerek, tekrar app.app/Contents
olarak yeniden adlandırarak ve çalıştırarak atlatmanın mümkün olduğunu unutmayın.
Asar dosyasından kodu çıkarmak için:
Ve değiştirdikten sonra tekrar paketleyin:
ELECTRON_RUN_AS_NODE
Belgeler göre, bu ortam değişkeni ayarlandığında, süreci normal bir Node.js süreci olarak başlatır.
Eğer RunAsNode
sigortası devre dışı bırakılmışsa, env var ELECTRON_RUN_AS_NODE
göz ardı edilecek ve bu çalışmayacaktır.
burada önerildiği gibi, bu env değişkenini bir plist içinde kötüye kullanarak kalıcılığı sağlamak mümkün olabilir:
NODE_OPTIONS
Yükü farklı bir dosyada saklayabilir ve çalıştırabilirsiniz:
Eğer EnableNodeOptionsEnvironmentVariable
anahtarı devre dışı bırakılmışsa, uygulama başlatıldığında NODE_OPTIONS ortam değişkenini yoksayacaktır, eğer ortam değişkeni ELECTRON_RUN_AS_NODE
ayarlanmamışsa, bu da RunAsNode
anahtarı devre dışı bırakılmışsa yoksayılacaktır.
Eğer ELECTRON_RUN_AS_NODE
ayarlamazsanız, şu hata ile karşılaşacaksınız: Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.
Bu ortam değişkenini bir plist içinde kötüye kullanarak kalıcılığı sağlamak için bu anahtarları ekleyebilirsiniz:
bu kaynağına göre, --inspect
, --inspect-brk
ve --remote-debugging-port
gibi bayraklarla bir Electron uygulaması çalıştırırsanız, bir hata ayıklama portu açılacaktır böylece ona bağlanabilirsiniz (örneğin chrome://inspect
üzerinden Chrome'dan) ve ona kod enjekte edebilir veya hatta yeni süreçler başlatabilirsiniz.
Örneğin:
Eğer EnableNodeCliInspectArguments
sigortası devre dışı bırakılmışsa, uygulama başlatıldığında node parametrelerini (örneğin --inspect
) göz ardı edecektir, eğer ortam değişkeni ELECTRON_RUN_AS_NODE
ayarlanmadıysa, bu da göz ardı edilecektir eğer sigorta RunAsNode
devre dışı bırakılmışsa.
Ancak, electron parametresi --remote-debugging-port=9229
kullanarak hala bazı bilgileri çalabilirsiniz, ancak önceki yük diğer süreçleri çalıştırmak için işe yaramayacaktır.
--remote-debugging-port=9222
parametresini kullanarak Electron Uygulamasından bazı bilgileri çalmak mümkündür, örneğin geçmiş (GET komutları ile) veya tarayıcının çerezleri (çünkü bunlar tarayıcı içinde şifresi çözülmüş durumdadır ve bunları verecek bir json uç noktası vardır).
Bunu nasıl yapacağınızı burada ve burada öğrenebilirsiniz ve otomatik aracı WhiteChocolateMacademiaNut veya şöyle basit bir script kullanabilirsiniz:
In bu blog yazısında, bu hata ayıklama, başsız bir chrome'un rastgele dosyaları rastgele konumlara indirmesi için kötüye kullanılıyor.
Bu ortam değişkenini bir plist'te kötüye kullanarak kalıcılığı sağlamak için bu anahtarları ekleyebilirsiniz:
macOS'teki TCC daemon, uygulamanın çalıştırılan sürümünü kontrol etmez. Bu nedenle, bir Electron uygulamasına kod enjekte edemiyorsanız, APP'nin önceki bir sürümünü indirip üzerine kod enjekte edebilirsiniz çünkü hala TCC ayrıcalıklarını alacaktır (Trust Cache engellemediği sürece).
Önceki teknikler, Electron uygulamasının sürecinde JS kodu çalıştırmanıza olanak tanır. Ancak, çocuk süreçlerin ana uygulama ile aynı sandbox profilinde çalıştığını ve TCC izinlerini miras aldığını unutmayın. Bu nedenle, örneğin kameraya veya mikrofona erişmek için hakları kötüye kullanmak istiyorsanız, süreçten başka bir ikili dosya çalıştırabilirsiniz.
electroniz3r aracı, kurulu savunmasız electron uygulamalarını bulmak ve bunlara kod enjekte etmek için kolayca kullanılabilir. Bu araç, --inspect
tekniğini kullanmaya çalışacaktır:
Kendiniz derlemeniz gerekiyor ve bunu şu şekilde kullanabilirsiniz:
AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)