XPC, macOS ve iOS üzerindeki işlemler arası iletişim anlamına gelen XNU (macOS tarafından kullanılan çekirdek) İşlem İletişimi'nin kısaltmasıdır. XPC, sistemdeki farklı işlemler arasında güvenli, asenkron yöntem çağrıları yapma mekanizması sağlar. Bu, Apple'ın güvenlik paradigmasının bir parçası olup, her bileşenin yalnızca işini yapmak için gereken izinlere sahip olduğu ayrıcalıklı uygulamaların oluşturulmasına olanak tanır ve bu şekilde bir sürecin tehlikeye girmesinden kaynaklanabilecek potansiyel zararı sınırlar.
XPC, aynı sistemde çalışan farklı programların veri alışverişi yapabilmesi için kullanılan bir İşlem İletişimi (IPC) yöntemi kullanır.
XPC'nin temel faydaları şunlardır:
Güvenlik: İşleri farklı süreçlere ayırarak, her sürece yalnızca ihtiyaç duyduğu izinler verilebilir. Bu, bir sürecin bile ele geçirilmiş olsa bile zarar verme yeteneğini sınırlar.
Kararlılık: XPC, çökmeleri oluştuğu bileşene izole eder. Bir süreç çöktüğünde, sistemdeki diğer bölümleri etkilemeden yeniden başlatılabilir.
Performans: XPC, farklı süreçlerde aynı anda farklı görevlerin çalıştırılmasına olanak tanır, bu nedenle kolay bir eşzamanlılık sağlar.
Tek dezavantaj, bir uygulamayı birkaç sürece ayırarak bunları XPC aracılığıyla iletişim kurmalarını sağlamaktır ve bu daha az verimli olabilir. Ancak günümüz sistemlerinde bunun neredeyse fark edilmez olduğu ve faydaların daha iyi olduğu söylenebilir.
Uygulama Özel XPC Hizmetleri
Bir uygulamanın XPC bileşenleri, uygulamanın kendisi içindedir. Örneğin, Safari'de bunları /Applications/Safari.app/Contents/XPCServices dizininde bulabilirsiniz. Bunlar .xpc uzantısına sahiptir (örneğin com.apple.Safari.SandboxBroker.xpc) ve ana ikili dosyanın içinde de bir paket olarak bulunur: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/MacOS/com.apple.Safari.SandboxBroker ve bir Info.plist: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/Info.plist
Bir XPC bileşeninin diğer XPC bileşenlerinden veya ana uygulama ikili dosyasından farklı yetkilendirmelere ve ayrıcalıklara sahip olacağını düşünebilirsiniz. ANCAK, bir XPC hizmeti, Info.plist dosyasındaki JoinExistingSession ayarı "True" olarak yapılandırılmışsa, XPC hizmeti, onu çağıran uygulama ile aynı güvenlik oturumunda çalışır.
XPC hizmetleri, gerektiğinde launchd tarafından başlatılır ve tüm görevler tamamlandığında sistem kaynaklarını serbest bırakmak için kapatılır. Uygulama özel XPC bileşenleri yalnızca uygulama tarafından kullanılabilir, bu da potansiyel güvenlik açıklarına ilişkin riski azaltır.
Sistem Genelindeki XPC Hizmetleri
Sistem genelindeki XPC hizmetleri tüm kullanıcılara erişilebilir. Bu hizmetler, launchd veya Mach türünde olabilir ve /System/Library/LaunchDaemons, /Library/LaunchDaemons, /System/Library/LaunchAgents veya /Library/LaunchAgents gibi belirli dizinlerde bulunan plist dosyalarında tanımlanması gerekmektedir.
Bu plist dosyalarında, hizmetin adını içeren MachServices adında bir anahtar ve ikili dosyanın yolunu içeren Program adında bir anahtar bulunur:
LaunchDameons içindekiler root tarafından çalıştırılır. Bu nedenle, bir yetkisiz işlem bunlardan biriyle iletişim kurabilirse, ayrıcalıkları yükseltebilir.
XPC Olay Mesajları
Uygulamalar, farklı olay mesajlarına abone olabilir ve böyle olaylar gerçekleştiğinde istenildiği zaman başlatılabilir. Bu hizmetlerin kurulumu, önceki dosyalarla aynı dizinlerde bulunan ve ek bir LaunchEvent anahtarını içeren launchd plist dosyalarında yapılır.
XPC Bağlantı Süreci Kontrolü
Bir işlem, bir XPC bağlantısı aracılığıyla bir yöntemi çağırmaya çalıştığında, XPC hizmeti bu işlemin bağlanmasına izin verip vermediğini kontrol etmelidir. İşte bunu kontrol etmek için yaygın kullanılan yöntemler ve yaygın hatalar:
Apple, uygulamaların bazı hakları yapılandırmasına ve nasıl elde edileceğine izin verir, böylece çağrılan işlem bu haklara sahipse XPC hizmetinden bir yöntemi çağırmasına izin verilir:
XPC mesajlarını dinlemek için xpcspy kullanabilirsiniz, bu da Frida kullanır.
# Installpip3installxpcspypip3installxpcspy--no-deps# To not make xpcspy install Frida 15 and downgrade your Frida installation# Start sniffingxpcspy-U-r-W<bundle-id>## Using filters (i: for input, o: for output)xpcspy-U<prog-name>-t'i:com.apple.*'-t'o:com.apple.*'-r
xyz.hacktricks.service.plist dosyası, macOS'ta XPC hizmetlerini başlatmak için kullanılan bir örnek bir property list dosyasıdır. Bu dosya, bir XPC hizmetinin nasıl başlatılacağını ve hangi işlevleri yerine getireceğini tanımlar.
Bu plist dosyasında, Label anahtarı, hizmetin benzersiz bir kimlik etiketi olarak kullanılacak bir dizedir. MachServices anahtarı, hizmetin hangi Mach servislerine erişebileceğini belirtir. ProgramArguments anahtarı, hizmetin çalıştırılacak uygulamanın yolu ve argümanlarını içerir.
Bu plist dosyasını kullanarak, bir XPC hizmetini başlatabilir ve hizmetin sağladığı işlevleri kullanabilirsiniz. Bu, macOS'ta inter-process iletişimi sağlamak ve hizmetler arasında veri paylaşımını kolaylaştırmak için yaygın olarak kullanılan bir yöntemdir.
# Compile the server & clientgccxpc_server.c-oxpc_servergccxpc_client.c-oxpc_client# Save server on it's locationcpxpc_server/tmp# Load daemonsudocpxyz.hacktricks.service.plist/Library/LaunchDaemonssudolaunchctlload/Library/LaunchDaemons/xyz.hacktricks.service.plist# Call client./xpc_client# Cleansudolaunchctlunload/Library/LaunchDaemons/xyz.hacktricks.service.plistsudorm/Library/LaunchDaemons/xyz.hacktricks.service.plist/tmp/xpc_server
Bu örnek, Objective-C kullanarak macOS'ta XPC (Inter-Process Communication) istemcisi oluşturmayı göstermektedir. XPC, farklı süreçler arasında iletişim kurmak için kullanılan bir mekanizmadır. Bu örnekte, "com.apple.securityd" adlı bir Mach servisine bağlanan bir XPC bağlantısı oluşturulur. Bağlantıya bir olay işleyici atanır ve olaylar alındığında ekrana yazdırılır.
Bu örneği derlemek ve çalıştırmak için aşağıdaki adımları izleyebilirsiniz:
Bir Objective-C projesi oluşturun ve oc_xpc_client.m dosyasını projenize ekleyin.
Projenizi derleyin ve çalıştırın.
Bu örnek, XPC istemcisi oluşturmanın temel bir örneğini sunmaktadır. Daha fazla özellik eklemek veya farklı bir XPC servisiyle iletişim kurmak için kodu özelleştirebilirsiniz.
Bu dosya, macOS'ta XPC hizmetlerini başlatmak için kullanılan bir örnek bir önyükleme ajanıdır. XPC, farklı süreçler arasında iletişim kurmak için kullanılan bir IPC (Inter-Process Communication) mekanizmasıdır. Bu plist dosyası, bir XPC hizmetini başlatmak için gerekli olan yapılandırmayı içerir.
Bu dosyayı kullanarak, bir XPC hizmetini başlatmak için gerekli olan parametreleri belirleyebilirsiniz. Örneğin, hedeflenen hizmetin kimlik bilgilerini, çalıştırılacak komutları ve diğer yapılandırma ayarlarını belirleyebilirsiniz.
Bu plist dosyasını kullanarak, hedeflenen bir XPC hizmetini kötüye kullanabilir ve ayrıcalık yükseltme saldırıları gerçekleştirebilirsiniz. Ancak, bu tür saldırılar yasa dışıdır ve yalnızca yasal izinlerle gerçekleştirilmelidir.
Bu dosyanın kullanımıyla ilgili daha fazla bilgi için, macOS XPC hizmetlerini kötüye kullanma konusundaki ilgili bölüme bakabilirsiniz.
```bash # Compile the server & client gcc -framework Foundation oc_xpc_server.m -o oc_xpc_server gcc -framework Foundation oc_xpc_client.m -o oc_xpc_client
## Dylb kodu içindeki İstemci
Bu bölümde, Dylb kodu içindeki istemci hakkında bilgi verilecektir.
Dylb, macOS'ta kullanılan bir IPC (İşlem Arası İletişim) mekanizmasıdır. Bu mekanizma, farklı süreçler arasında iletişim kurmak için kullanılır. Dylb kodu, bir istemci ve bir sunucu olmak üzere iki bileşenden oluşur.
İstemci, Dylb sunucusuna bağlanarak talepler gönderir ve yanıtları alır. İstemci, sunucuyla iletişim kurmak için belirli bir protokolü takip eder. Bu protokol, istemcinin sunucuya hangi talepleri gönderebileceğini ve nasıl yanıtlar alabileceğini belirler.
Dylb kodu içindeki istemci, genellikle bir uygulama tarafından kullanılır. Uygulama, Dylb istemcisini kullanarak başka bir süreçle iletişim kurabilir ve veri alışverişi yapabilir. Bu, uygulamanın farklı süreçler arasında bilgi paylaşmasını sağlar.
Dylb kodu içindeki istemci, güvenlik açıklarına neden olabilecek potansiyel bir noktadır. İstismarcılar, istemci tarafında hatalar bulup bunları kullanarak ayrıcalık yükseltme saldırıları gerçekleştirebilirler. Bu nedenle, Dylb kodu içindeki istemciyi güvenli bir şekilde uygulamak önemlidir.
Bu bölümde, Dylb kodu içindeki istemci hakkında daha fazla bilgi ve güvenlik önlemleri bulabilirsiniz.
```objectivec
// gcc -dynamiclib -framework Foundation oc_xpc_client.m -o oc_xpc_client.dylib
// gcc injection example:
// DYLD_INSERT_LIBRARIES=oc_xpc_client.dylib /path/to/vuln/bin
#import <Foundation/Foundation.h>
@protocol MyXPCProtocol
- (void)sayHello:(NSString *)some_string withReply:(void (^)(NSString *))reply;
@end
__attribute__((constructor))
static void customConstructor(int argc, const char **argv)
{
NSString* _serviceName = @"xyz.hacktricks.svcoc";
NSXPCConnection* _agentConnection = [[NSXPCConnection alloc] initWithMachServiceName:_serviceName options:4096];
[_agentConnection setRemoteObjectInterface:[NSXPCInterface interfaceWithProtocol:@protocol(MyXPCProtocol)]];
[_agentConnection resume];
[[_agentConnection remoteObjectProxyWithErrorHandler:^(NSError* error) {
(void)error;
NSLog(@"Connection Failure");
}] sayHello:@"Hello, Server!" withReply:^(NSString *response) {
NSLog(@"Received response: %@", response);
} ];
NSLog(@"Done!");
return;
}