macOS IPC - Inter Process Communication
Portlar Aracılığıyla Mach Mesajlaşması
Temel Bilgiler
Mach, kaynakları paylaşmak için görevleri en küçük birim olarak kullanır ve her görev çoklu iş parçacığı içerebilir. Bu görevler ve iş parçacıkları POSIX işlemleri ve iş parçacıklarıyla 1:1 eşlenir.
Görevler arasındaki iletişim, Mach İşlem Arası İletişim (IPC) aracılığıyla gerçekleşir ve tek yönlü iletişim kanallarını kullanır. Mesajlar, portlar arasında aktarılır ve bunlar çekirdek tarafından yönetilen bir tür mesaj kuyruğu gibi davranır.
Bir port, Mach IPC'nin temel öğesidir. Bu, mesaj göndermek ve almak için kullanılabilir.
Her işlemde bir IPC tablosu bulunur ve burada işlemin mach portları bulunabilir. Bir mach portun adı aslında bir sayıdır (çekirdek nesnesine işaret eden bir işaretçi).
Bir işlem ayrıca bir port adını bazı haklarla farklı bir göreve gönderebilir ve çekirdek bu girişi diğer görevin IPC tablosuna ekler.
Port Hakları
İletişimde önemli olan port hakları, bir görevin yapabileceği işlemleri tanımlar. Mümkün olan port hakları şunlardır (buradan tanımlamalar):
Alma hakkı, porta gönderilen mesajları almayı sağlar. Mach portları MPSC (çoklu üretici, tek tüketici) kuyruklarıdır, bu da sistem genelinde bir port için yalnızca bir alma hakkının olabileceği anlamına gelir (borular gibi, birden çok işlem bir borunun okuma ucuna ait dosya tanımlayıcılarına sahip olabilir).
Alma hakkına sahip bir görev, mesajları alabilir ve Gönderme hakları oluşturabilir, böylece mesaj gönderebilir. Başlangıçta yalnızca kendi görevi, portun üzerinde Alma hakkına sahiptir.
Alma hakkının sahibi öldüğünde veya onu sonlandırdığında, gönderme hakkı işlevsiz hale gelir (ölü ad).
Gönderme hakkı, porta mesaj göndermeyi sağlar.
Gönderme hakkı kopyalanabilir, böylece gönderme hakkına sahip bir görev hakkı kopyalayabilir ve üçüncü bir göreve verilebilir.
Port hakları ayrıca Mac mesajları aracılığıyla da geçirilebilir.
Bir kez gönderme hakkı, porta bir mesaj göndermeyi ve ardından kaybolmayı sağlar.
Bu hak kopyalanamaz, ancak taşınabilir.
Port kümesi hakkı, yalnızca tek bir port değil bir port kümesini belirtir. Bir port kümesinden bir mesaj çıkarmak, içerdiği portlardan birinden bir mesaj çıkarır. Port kümeleri, Unix'teki
select
/poll
/epoll
/kqueue
gibi birkaç porta aynı anda dinlemek için kullanılabilir.Ölü ad, gerçek bir port hakkı değil, yalnızca bir yer tutucudur. Bir port yok edildiğinde, portun tüm var olan port hakları ölü adlara dönüşür.
Görevler, SEND haklarını başkalarına aktarabilir, böylece onlara geri mesaj gönderme yetkisi verilebilir. SEND hakları da klonlanabilir, böylece bir görev hakı kopyalayabilir ve üçüncü bir göreve verebilir. Bu, aracı bir süreç olan başlangıç sunucusu ile birlikte, görevler arasında etkili iletişim sağlar.
Dosya Portları
Dosya portları, dosya tanımlayıcılarını Mac portlarına (Mach port hakları kullanarak) kapsüllüyebilir. Belirli bir FD'den fileport_makeport
kullanarak bir fileport
oluşturmak ve bir FD oluşturmak mümkündür.
İletişim Kurma
Daha önce belirtildiği gibi, Mach mesajları aracılığıyla hakları göndermek mümkündür, ancak zaten bir mesaj gönderme hakkına sahip olmadan bir hakkı gönderemezsiniz. Peki, ilk iletişim nasıl kurulur?
Bunun için başlangıç sunucusu (mac'te launchd) devreye girer, çünkü herkes başlangıç sunucusuna bir SEND hakkı alabilir, böylece başka bir işleme mesaj göndermek için bir hakkı istemek mümkündür:
Görev A, ALMA hakkı alarak yeni bir port oluşturur.
ALMA hakkının sahibi olan Görev A, port için bir GÖNDERME hakkı oluşturur.
Görev A, başlangıç sunucusu ile bir bağlantı kurar ve başlangıçta oluşturduğu porta GÖNDERME hakkını gönderir.
Unutmayın ki herkes başlangıç sunucusuna bir GÖNDERME hakkı alabilir.
Görev A, başlangıç sunucusuna bir
bootstrap_register
mesajı göndererek verilen portacom.apple.taska
gibi bir isimle ilişkilendirir.Görev B, başlangıç sunucusu ile etkileşime girerek bir başlangıç hizmeti için arama yapar (
bootstrap_lookup
). Başlangıç sunucusu yanıt verebilsin diye, görev B, arama mesajı içinde önceden oluşturduğu bir port için GÖNDERME hakkı gönderir. Arama başarılıysa, sunucu Task A'dan aldığı GÖNDERME hakkını kopyalar ve Task B'ye iletir.
Unutmayın ki herkes başlangıç sunucusuna bir GÖNDERME hakkı alabilir.
Bu GÖNDERME hakkı ile Görev B, Görev A'ya bir mesaj gönderebilir.
İki yönlü iletişim için genellikle görev B, bir ALMA hakkı ve bir GÖNDERME hakkı içeren yeni bir port oluşturur ve Görev A'ya GÖNDERME hakkını verir, böylece Görev A, GÖREV B'ye mesaj gönderebilir (iki yönlü iletişim).
Başlangıç sunucusu, bir görevin iddia ettiği hizmet adını doğrulayamaz. Bu, bir görevin potansiyel olarak herhangi bir sistem görevini taklit edebileceği anlamına gelir, örneğin yanlışlıkla bir yetkilendirme hizmeti adı iddia edebilir ve ardından her isteği onaylayabilir.
Daha sonra, Apple, sistem tarafından sağlanan hizmetlerin adlarını güvenli yapılandırma dosyalarında saklar. Bu dosyalar, SIP korumalı dizinlerde bulunur: /System/Library/LaunchDaemons
ve /System/Library/LaunchAgents
. Her hizmet adının yanında, ilişkili ikili dosya da saklanır. Başlangıç sunucusu, bu hizmet adları için her biri için bir ALMA hakkı oluşturur ve saklar.
Bu önceden tanımlanmış hizmetler için, arama süreci biraz farklıdır. Bir hizmet adı aranırken, launchd hizmeti dinamik olarak başlatır. Yeni iş akışı şöyle:
Görev B, bir hizmet adı için başlangıç araması başlatır.
launchd, görevin çalışıp çalışmadığını kontrol eder ve çalışmıyorsa, başlatır.
Görev A (hizmet), bir başlangıç kontrolü gerçekleştirir (
bootstrap_check_in()
). Burada, başlangıç sunucusu bir GÖNDERME hakkı oluşturur, saklar ve ALMA hakkını Görev A'ya aktarır.launchd, GÖNDERME hakkını kopyalar ve Görev B'ye iletir.
Görev B, bir ALMA hakkı ve bir GÖNDERME hakkı içeren yeni bir port oluşturur ve Görev A'ya GÖNDERME hakkını verir (hizmet), böylece Görev A, GÖREV B'ye mesaj gönderebilir (iki yönlü iletişim).
Ancak, bu süreç yalnızca önceden tanımlanmış sistem görevleri için geçerlidir. Sistem dışı görevler hala önceki şekilde çalışır, bu da taklit edilme olasılığına izin verebilir.
Bu nedenle, launchd asla çökmemeli veya tüm sistem çökecektir.
Bir Mach İletisi
Daha fazla bilgiyi burada bulabilirsiniz
mach_msg
işlevi, temelde bir sistem çağrısı olup Mach iletilerini göndermek ve almak için kullanılır. İşlev, iletilmesi gereken iletiyi başlangıç argümanı olarak gerektirir. Bu ileti, bir mach_msg_header_t
yapısı ile başlamalı ve ardından gerçek ileti içeriği gelmelidir. Yapı aşağıdaki gibi tanımlanmıştır:
İşlemciler, bir Mach bağlantı noktasında ileti almak için bir alma hakkına sahip olabilirler. Tersine, gönderenler bir gönderme veya bir kez gönderme hakkına sahiptir. Bir kez gönderme hakkı, yalnızca bir ileti göndermek için kullanılır ve ardından geçersiz hale gelir.
Başlangıç alanı msgh_bits
bir bit haritasıdır:
İlk bit (en anlamlı) bir ileti'nin karmaşık olduğunu belirtmek için kullanılır (aşağıda daha fazla bilgi)
ve 4. bitler çekirdek tarafından kullanılır
baytın en az 5 anlamlı bitsi makbuz için kullanılabilir: anahtar/değer kombinasyonları göndermek için başka bir bağlantı nokta türü.
baytın en az 5 anlamlı bitsi yerel bağlantı noktası için kullanılabilir
baytın en az 5 anlamlı bitsi uzak bağlantı noktası için kullanılabilir
Makbuzda, yerel ve uzak bağlantı noktalarında belirtilebilecek türler mach/message.h adresinden alınabilir:
Örneğin, MACH_MSG_TYPE_MAKE_SEND_ONCE
, bu bağlantı noktası için türetilmiş ve aktarılmış bir tek seferlik gönderme hakkının belirtildiğini belirtmek için kullanılabilir. Alıcı yanıt göndermesin diye MACH_PORT_NULL
da belirtilebilir.
Kolay iki yönlü iletişim sağlamak için bir işlem, yanıt bağlantı noktası (msgh_local_port
) olarak adlandırılan bir mach bağlantı noktası belirtebilir, burada mesajın alıcısı bu iletiye yanıt gönderebilir.
Bu tür iki yönlü iletişimin XPC iletilerinde kullanıldığını unutmayın (xpc_connection_send_message_with_reply
ve xpc_connection_send_message_with_reply_sync
). Ancak genellikle farklı bağlantı noktaları oluşturulur, önceki açıklandığı gibi iki yönlü iletişimi oluşturmak için.
Mesaj başlığının diğer alanları şunlardır:
msgh_size
: tüm paketin boyutu.msgh_remote_port
: bu iletiyi gönderilen bağlantı noktası.msgh_voucher_port
: mach fişleri.msgh_id
: alıcı tarafından yorumlanan bu ileti ID'si.
Mach iletileri, mach çekirdeğine yerleştirilmiş tek alıcı, çoklu gönderen iletişim kanalı olan bir mach bağlantı noktası üzerinden gönderilir. Birden fazla işlem, bir mach bağlantı noktasına ileti gönderebilir, ancak herhangi bir zamanda sadece bir işlem ondan okuyabilir.
İletiler daha sonra mach_msg_header_t
başlığı, ardından gövde ve trailer (varsa) ile oluşturulur ve yanıt verme izni verebilir. Bu durumlarda, çekirdek sadece mesajı bir görevden diğerine iletmelidir.
Bir trailer, kullanıcı tarafından ayarlanamayan mesaja çekirdek tarafından eklenen bilgilerdir ve alıcıdan bu bilgileri talep etmek için MACH_RCV_TRAILER_<trailer_opt>
bayrakları kullanılabilir (talep edilebilecek farklı bilgiler vardır).
Karmaşık İletiler
Ancak, ek port hakları geçiren veya belleği paylaşan daha karmaşık iletiler gibi diğer iletiler de vardır, burada çekirdek bu nesneleri alıcıya göndermek zorundadır. Bu durumlarda, başlık msgh_bits
'in en anlamlı biti ayarlanır.
Geçirilebilecek olası tanımlayıcılar mach/message.h
içinde tanımlanmıştır.
Mac Port API'leri
Portların görev alanıyla ilişkilendirildiğini unutmayın, bu nedenle bir port oluşturmak veya aramak için görev alanı da sorgulanır (mach/mach_port.h
içinde daha fazla bilgi):
mach_port_allocate
|mach_port_construct
: Bir port oluşturur.mach_port_allocate
ayrıca bir port seti oluşturabilir: bir grup port üzerinde alım hakkı. Bir ileti alındığında, iletiyi gönderen port belirtilir.mach_port_allocate_name
: Portun adını değiştirir (varsayılan olarak 32 bitlik tamsayı).mach_port_names
: Bir hedeften port adlarını alır.mach_port_type
: Bir görevin bir ada sahip olma haklarını alır.mach_port_rename
: Bir portu yeniden adlandırır (FD'ler için dup2 gibi).mach_port_allocate
: YENİ ALIM, PORT_SET veya DEAD_NAME oluşturur.mach_port_insert_right
: ALIM hakkına sahip olduğunuz bir portta yeni bir hak oluşturur.mach_port_...
mach_msg
|mach_msg_overwrite
: Mach iletilerini göndermek ve almak için kullanılan işlevler. Üzerine yazma sürümü, ileti alımı için farklı bir önbellek belirtmenizi sağlar (diğer sürüm sadece onu yeniden kullanır).
Debug mach_msg
mach_msg
ve mach_msg_overwrite
işlevlerinin ileti göndermek ve almak için kullanılan işlevler olduğu için bunlara bir kesme noktası ayarlamak gönderilen ve alınan iletileri incelemeyi sağlar.
Örneğin, bu işlevi kullanan libSystem.B
'yi yükleyecek herhangi bir uygulamayı hata ayıklamaya başlayın.
mach_msg
'nin argümanlarını almak için kayıtları kontrol edin. Bunlar argümanlardır (mach/message.h adresinden):
Kayıtlardan değerleri alın:
İlk argümanı kontrol ederek mesaj başlığını inceleyin:
O tür mach_msg_bits_t
türü, bir yanıtı izin vermek için çok yaygındır.
Bağlantı noktalarını sırala
İsim, bağlantı noktasına verilen varsayılan isimdir (ilk 3 baytının nasıl arttığını kontrol edin). ipc-object
ise bağlantı noktasının şifrelenmiş benzersiz tanımlayıcısıdır.
Ayrıca, yalnızca send
hakkına sahip bağlantı noktalarının sahibini belirlediğine dikkat edin (bağlantı noktası adı + pid).
Ayrıca, diğer görevlere bağlı olanı belirtmek için +
işaretinin kullanımına dikkat edin.
Ayrıca, procesxp kullanarak kayıtlı hizmet adlarını (SIP devre dışı bırakıldığında com.apple.system-task-port
gerektiği için) görmek de mümkündür:
Bu aracı iOS'ta http://newosxbook.com/tools/binpack64-256.tar.gz adresinden indirerek yükleyebilirsiniz.
Kod örneği
Göndericinin nasıl bir bağlantı noktası tahsis ettiğine, org.darlinghq.example
adı için bir gönderme hakkı oluşturduğuna ve bunu önyükleme sunucusuna gönderdiğine dikkat edin, gönderici bu adın gönderme hakkını istedi ve bunu kullanarak bir mesaj gönderdi.
macOS IPC (Inter-Process Communication)
Bu örnek, bir mesaj kuyruğu üzerinden basit bir IPC (Inter-Process Communication - İşlem Arası İletişim) senaryosunu göstermektedir. Bu senaryoda, bir gönderen işlemi bir mesaj kuyruğuna mesaj gönderir ve bir alıcı işlemi bu mesajı alır.
Bu örnekte, ftok
fonksiyonu kullanılarak bir anahtar oluşturulur ve msgget
ile bir mesaj kuyruğu oluşturulur. Daha sonra msgsnd
ile mesaj gönderilir.
Ayrıcalıklı Bağlantı Noktaları
Belirli hassas eylemleri gerçekleştirmeye veya belirli hassas verilere erişmeye izin veren bazı özel bağlantı noktaları vardır, görevlerin bunlar üzerinde GÖNDERME izinlerine sahip olması durumunda. Bu, saldırganlar açısından bu bağlantı noktalarını çok ilginç kılar, sadece yeteneklerinden değil, aynı zamanda GÖNDERME izinlerinin görevler arasında paylaşılabilmesi olasılığından dolayı.
Ana Özel Bağlantı Noktaları
Bu bağlantı noktaları bir numara ile temsil edilir.
GÖNDERME hakları, host_get_special_port
çağrısı ile elde edilebilir ve ALMA hakları host_set_special_port
çağrısı ile elde edilir. Ancak, her iki çağrı da yalnızca kökün erişebileceği host_priv
bağlantı noktasını gerektirir. Ayrıca, geçmişte kök, örneğin HOST_KEXTD_PORT
'u ele geçirerek kod imzalarını atlamaya izin veren keyfi bağlantı noktalarını ele geçirebiliyordu (SIP şimdi buna engel oluyor).
Bunlar 2 gruba ayrılır: İlk 7 bağlantı noktası çekirdek tarafından sahiplenilir; 1 HOST_PORT
, 2 HOST_PRIV_PORT
, 3 HOST_IO_MASTER_PORT
ve 7 HOST_MAX_SPECIAL_KERNEL_PORT
.
8'den başlayanlar ise sistem hizmetlileri tarafından sahiplenilir ve host_special_ports.h
dosyasında tanımlanmıştır.
Ana bağlantı noktası: Bir işlem bu bağlantı noktası üzerinde GÖNDERME ayrıcalığına sahipse, sistem hakkında bilgi alabilir ve aşağıdaki işlevlerini çağırabilir:
host_processor_info
: İşlemci bilgilerini alhost_info
: Ana bilgiyi alhost_virtual_physical_table_info
: Sanal/Fiziksel sayfa tablosu (MACH_VMDEBUG gerektirir)host_statistics
: Ana istatistikleri almach_memory_info
: Çekirdek bellek düzenini alAna Priv bağlantı noktası: Bu bağlantı noktası üzerinde GÖNDERME hakkına sahip bir işlem, örneğin önyükleme verilerini gösterme veya bir çekirdek uzantısını yükleme girişiminde bulunma gibi ayrıcalıklı eylemler gerçekleştirebilir. Bu izne sahip olmak için işlemin kök olması gerekir.
Ayrıca,
kext_request
API'sını çağırmak için yalnızca Apple ikililerine verilencom.apple.private.kext*
diğer ayrıcalıklara ihtiyaç vardır.Çağrılabilen diğer işlevler şunlardır:
host_get_boot_info
:machine_boot_info()
'yu alhost_priv_statistics
: Ayrıcalıklı istatistikleri alvm_allocate_cpm
: Ardışık Fiziksel Bellek Ayırhost_processors
: İşlemcilere gönderme hakkımach_vm_wire
: Belleği yerleşik yapKök bu izne erişebildiği için,
host_set_[special/exception]_port[s]
'ı çağırarak ana özel veya istisna bağlantı noktalarını ele geçirebilir.
Tüm ana özel bağlantı noktalarını görmek mümkündür:
Görev Bağlantı Noktaları
Başlangıçta Mach'ta "işlemler" değil, "görevler" vardı ve bu daha çok bir thread konteyneri olarak kabul ediliyordu. Mach, BSD ile birleştirildiğinde her görev bir BSD işlemi ile ilişkilendirildi. Bu nedenle her BSD işleminin bir işlem olması için gereken detayları ve her Mach görevinin de iç işleyişi vardır (kernel_task hariç olan mevcut pid 0).
Bununla ilgili iki çok ilginç fonksiyon bulunmaktadır:
task_for_pid(hedef_görev_bağlantı_noktası, pid, &pid_ile_ilgili_görev_bağlantı_noktası)
: Belirtilenpid
ile ilişkili görevin görev bağlantı noktası için bir GÖNDERME hakkı alın ve belirtilenhedef_görev_bağlantı_noktası
'na (genelliklemach_task_self()
kullanan çağrıcı görev olur, ancak farklı bir görev üzerinde bir GÖNDERME bağlantı noktası da olabilir) verin.pid_for_task(görev, &pid)
: Bir göreve bir GÖNDERME hakkı verildiğinde, bu görevin hangi PID ile ilişkili olduğunu bulun.
Görev içinde işlemler gerçekleştirmek için görevin kendisine mach_task_self()
çağrısı yaparak bir GÖNDERME
hakkına ihtiyacı vardı (bu, task_self_trap
(28) kullanır). Bu izinle bir görev, birkaç işlemi gerçekleştirebilir:
task_threads
: Görevin iş parçacıklarının tüm görev bağlantı noktaları üzerinde GÖNDERME hakkı alıntask_info
: Bir görev hakkında bilgi alıntask_suspend/resume
: Bir görevi askıya alın veya devam ettirintask_[get/set]_special_port
thread_create
: Bir iş parçacığı oluşturuntask_[get/set]_state
: Görev durumunu kontrol edinve daha fazlası mach/task.h içinde bulunabilir.
Farklı bir görevin görev bağlantı noktası üzerinde bir GÖNDERME hakkı ile, farklı bir görev üzerinde böyle işlemler gerçekleştirmek mümkündür.
Ayrıca, görev_bağlantı_noktası aynı zamanda vm_map
bağlantı noktasıdır ve vm_read()
ve vm_write()
gibi işlevlerle bir görev içinde belleği okuma ve değiştirme izni verir. Bu temelde, farklı bir görevin görev_bağlantı_noktası üzerinde GÖNDERME haklarına sahip bir görevin, o göreve kod enjekte etme yeteneği olacaktır.
Unutmayın, çünkü kernel de bir görevdir, eğer biri kernel_task
üzerinde bir GÖNDERME izni almayı başarırsa, kernelin istediği herhangi bir şeyi yürütmesini sağlayabilir (jailbreak).
Çağrıcı görev için bu bağlantı noktası için adı almak için
mach_task_self()
'i çağırın. Bu bağlantı noktası yalnızcaexec()
sırasında miras alınır;fork()
ile oluşturulan yeni bir görev yeni bir görev bağlantı noktası alır (özel bir durum olarak, bir görev,exec()
den sonra bir suid ikili dosyada da yeni bir görev bağlantı noktası alır). Bir görevi başlatmak ve bağlantı noktasını almanın tek yolu,fork()
yaparken "port takası dansını" gerçekleştirmektir.Bu, bağlantı noktasına erişim için kısıtlamalardır (
AppleMobileFileIntegrity
ikilisindenmacos_task_policy
'den):Uygulamanın
com.apple.security.get-task-allow
yetkisi varsa, aynı kullanıcıdan gelen işlemler görev bağlantı noktasına erişebilir (genellikle hata ayıklama için Xcode tarafından eklenir). Notarizasyon süreci bunu üretim sürümlerine izin vermez.com.apple.system-task-ports
yetkisine sahip uygulamalar, çekirdek hariç olmak üzere herhangi bir işlem için görev bağlantı noktasını alabilir. Daha eski sürümlerdetask_for_pid-allow
olarak adlandırılıyordu. Bu yalnızca Apple uygulamalarına verilir.Root, sertifikalı bir çalışma zamanı ile derlenmemiş uygulamaların görev bağlantı noktalarına erişebilir (ve Apple'dan olmayan uygulamalardan).
Görev adı bağlantı noktası: Görev bağlantı noktası için ayrıcalıklı olmayan bir versiyondur. Görevi referans alır, ancak kontrol etmeye izin vermez. Yalnızca bu aracılığıyla task_info()
gibi bir şeyin mevcut olduğu görünmektedir.
Görev Bağlantı Noktası Aracılığıyla İş Parçacığına Shellcode Enjeksiyonu
Shellcode'u aşağıdaki yerden alabilirsiniz:
pageIntroduction to ARM64v8IPC (İşlem Arası İletişim) - macOS
Bu bölümde, macOS'ta IPC'nin nasıl kullanılabileceği ve kötüye nasıl kullanılabileceği hakkında bilgi bulacaksınız. IPC, farklı işlemler arasında veri iletişimi sağlar ve kötü niyetli bir saldırgan için bir hedef olabilir. Bu bölümde, IPC'nin güvenliğini sağlamak için alınabilecek önlemler hakkında bilgi bulacaksınız.
IPC Yöntemleri
Mach Ports: IPC için kullanılan temel mekanizma. Saldırganlar, yetkisiz erişim elde etmek için Mach portlarını kötüye kullanabilir.
XPC Services: IPC için kullanılan yüksek seviyeli bir API. Güvenlik kontrolleri zayıf olduğunda kötüye kullanılabilir.
Distributed Objects: IPC için kullanılan başka bir API. Güvenlik kontrolleri zayıf olduğunda kötüye kullanılabilir.
Saldırı Senaryoları
IPC Bombing: Saldırgan, hedef sistemde IPC çağrılarını aşırı yükleyerek hizmet reddi saldırısı gerçekleştirebilir.
IPC Sniffing: Saldırgan, IPC trafiğini izleyerek hassas verileri ele geçirebilir.
IPC Injection: Saldırgan, hedef işlem arasına kötü amaçlı kod enjekte ederek ayrıcalıklarını artırabilir.
Savunma Stratejileri
Least Privilege: IPC kullanımını sınırlayarak ayrıcalıkları en aza indirin.
Encryption: IPC trafiğini şifreleyerek verilerin gizliliğini koruyun.
Integrity Checks: IPC çağrılarını doğrulamak için bütünlük kontrolleri uygulayın.
Bu bölümde, IPC'nin nasıl kötüye kullanılabileceği ve nasıl korunabileceği hakkında daha fazla bilgi bulacaksınız.
Önceki programı derleyin ve aynı kullanıcıyla kod enjekte etmek için yetkileri ekleyin (aksi halde sudo kullanmanız gerekecektir).
Last updated