Portal Samsung Galaxy Cihazlarda Arka Kapı

NaytSeyd

Super Moderator
Staff member
Super Mod
Messages
693
Likes
1,628
#1
Buradaki yazı 2012 tarihlidir. Ancak Telefon üreticilerinin cihazlara nasıl erişim sağladıklarını anlamak açısından önemlidir.

Bu sayfa, Samsung Galaxy cihazlarında bulunan arka kapının teknik bir açıklamasını içerir. Sorunun genel bir açıklaması için, lütfen Özgür Yazılım Vakfı’nın web sitesinde yayınlanan bildirime bakın.

Bu arka kapı, cihazlarla birlikte verilenler de dahil olmak üzere etkilenen Samsung Galaxy cihazlarında çalışan çoğu sahipli Android sisteminde mevcuttur. Ancak cihaza Replicant (LineageOS gibi açık kaynaklı özgür bir Android dağıtımı) kurulduğunda, bu arka kapı ortadan kalkar çünkü Replicant’ın arka kapılarla işi yoktur.

Özetle
Sahipli Android sürümlerini çalıştıran Samsung Galaxy cihazlar, cihazda depolanan verilere uzaktan erişim sağlayan bir arka kapı ile birlikte gelir. Özellikle, Samsung IPC protokolünü kullanarak modem ile iletişimin sağlanmasından sorumlu olan sahipli yazılım, modemin telefonun deposunda uzak G/Ç işlemlerini gerçekleştirmesine izin veren RFS komutları olarak bilinen bir istek sınıfını uygular. Modemin sahipli bir yazılım çalıştırması, tehlikeli RFS mesajlarını yürütmek ve telefonun dosya sistemine erişmek için kullanılabilecek uzaktan denetim imkanı sunması anlamına gelir.

Bilinen Etkilenen Cihazlar
Aşağıdaki tablo, birlikte verildiği yazılımın bir parçası olarak bu arka kapıyı içerdiği bilinen cihazları gösterir.


Diğer Samsung Galaxy cihazlarıyla ilgili kesin bir duyumumuz olmasa da muhtemelen aynı sahipli kullanıcı tarafı uygulamasıyla Samsung IPC protokolünü kullandığından, herhangi bir bu tür 3G cihazın da bu arka kapıdan etkilenmesi muhtemeldir.

Arka kapı örneği
Arka kapıyı araştırmak ve modemin gerçekte ne yapmasına izin verdiğini denetlemek etmek için, tehlikeli mesajları kullanarak talepleri oluşturması ve enjekte etmesi ve sonuçlarını kontrol etmesi için modem çekirdeği sürücüsüne bir miktar kod eklendi.

Aşağıdaki yama: 0001-modem_if-Inject-and-intercept-RFS-I-O-messages-to-pe.patch (SMDK4412 Replicant 4.2 çekirdeği için geçerli olmak üzere), arka kapının aşağıdakileri yapacak örnek bir kullanımını ekler:
  • /data/radio/test dosyasını aç
  • içeriğini oku
  • dosyayı kapat
Bu, tehlikeli yazılımın modem talebi üzerine bu işlemleri gerçekleştireceğini gösterir. Yazılım eklemesinin /efs/root/ yolunu sağlanan yola iliştirdiğine dikkat edin, ancak bu yoldan çıkıp dosya sistemindeki herhangi bir dosyayı istemek (../../ kullanarak) oldukça basittir. Dosyaların, tehlikeli yazılımın bazı cihazlarda kök kullanıcı izinleriyle açılabildiğini unutmayın. Diğer durumlarda, kullanıcının kişisel verilerine (/sdcard) hala erişebilen ayrıcalıksız bir kullanıcı olarak çalışır. Son olarak, bazı cihazlar kullanıcının kişisel verileri (/sdcard) dahil modemin erişebileceği olası dosyaların kapsamını önemli ölçüde kısıtlayan SELinux’u uygulayabilir.

Aşağıdaki örnek, CyanogenMod 10.1.3 çalıştıran bir Galaxy Note 2 (N7100) ile elde edildi.

Örnek dosya
Bu gösterim için kullanılan örnek dosya (/data/radio/test) “Merhaba Dünya!” ile doludur!”:

Çekirdek dökümü
Code:
root@android:/ # hexdump -C /data/radio/test
00000000  48 65 6c 6c 6f 20 57 6f  72 6c 64 21 0a           |Hello World!.|
0000000d
Code:
<3>[   62.712637] c0 mif: rx_iodev_skb: rx_iodev_skb: Dropping RFS frame
<3>[   62.712808] c0 mif: rfs_craft_start: rfs_craft_start: Crafting open
<3>[ 62.712966] c0 mif: rfs_craft_start: rfs_craft_start: Adding SKB to queue
<3>[ 62.713122] c0 mif: rx_iodev_skb: rx_iodev_skb: Dropping RFS frame
<3>[ 62.744690] c0 mif: misc_write: misc_write: Intercepted RFS response
<3>[ 62.744867] c0 mif: rfs_craft_write: rfs_craft_write: Open response: fd=21, errno=0
<3>[ 62.745116] c0 mif: rfs_craft_write: rfs_craft_write: Adding SKB to queue
<3>[ 62.792888] c0 mif: misc_write: misc_write: Intercepted RFS response
<3>[ 62.793026] c0 mif: rfs_craft_write: rfs_craft_write: Read response: 12 bytes read
<3>[ 62.793154] c0 mif: mif_print_data: 0000: 48 65 6c 6c 6f 20 57 6f 72 6c 64 21
<3>[ 62.793284] c0 mif: rfs_craft_write: rfs_craft_write: Adding SKB to queue
<3>[ 62.796168] c0 mif: misc_write: misc_write: Intercepted RFS response
<3>[ 62.796269] c0 mif: rfs_craft_write: rfs_craft_write: Rx RFS message with command 0x6 and size 14
<3>[   62.796422] c0 mif: mif_print_data: 0000: 00 00 00 00  00 00 00 00
İlgili kısım, /data/radio/test dosyasının içeriğiyle eşleşen okuma talebine verilen yanıttır, dolayısıyla tehlikeli yazılımın arka kapıyı uyguladığını açıkça gösterir.
Code:
<3>[   62.793026] c0 mif: rfs_craft_write: rfs_craft_write: Read response: 12 bytes read
<3>[   62.793154] c0 mif: mif_print_data: 0000: 48 65 6c 6c  6f 20 57 6f  72 6c 64 21
Tehlikeli yazılım dökümü
Code:
E/RIL     ( 1927): processRFS: received standalone RFS frame. len 35
E/RIL     ( 1927): ipc_recv_rfs()
E/RIL ( 1927): get_wakelock: 1. on 1, ril_WakeLock_Mask 0
E/RIL ( 1927): get_wakelock: 2. on 1, ril_WakeLock_Mask 1
E/RIL ( 1927): RxRFS_OpenFile:
E/RIL ( 1927): RxRFS_OpenFile: open file "/efs/root/../../data/radio/test" flag O_RDWR (0x00000002)
E/RIL ( 1927): check dir '/efs/root/../../data/radio'
E/RIL ( 1927): A directory already exists.
E/RIL ( 1927): RxRFS_OpenFile: length 14
E/RIL ( 1927): TxRFS_CfrmOpenFile()
E/RIL ( 1927): TxRFS_CfrmOpenFile(): length 14
E/RIL ( 1927): IPC_send_singleRfsIPC: fd 16 sendto 14 bytes rfs_hdr =6
E/RIL ( 1927): get_wakelock: 1. on 0, ril_WakeLock_Mask 1
E/RIL ( 1927): get_wakelock: 2. on 0, ril_WakeLock_Mask 0
E/RIL ( 1927): set_wakelock: secril_rfs-interface 0
E/RIL ( 1927): set_wakelock: secril_fmt-interface 1
E/RIL     ( 1927): processIPC: Single IPC plen 23, pkt 23

E/RIL     ( 1927): processRFS: received standalone RFS frame. len 14
E/RIL     ( 1927): ipc_recv_rfs()
E/RIL ( 1927): get_wakelock: 1. on 1, ril_WakeLock_Mask 0
E/RIL ( 1927): get_wakelock: 2. on 1, ril_WakeLock_Mask 1
E/RIL ( 1927): RxRFS_ReadFile:
E/RIL ( 1927): RxRFS_ReadFile: length 4110
E/RIL ( 1927): TxRFS_CfrmReadFile()
E/RIL ( 1927): TxRFS_CfrmReadFile(): length 4110
E/RIL     ( 1927): IPC_send_singleRfsIPC: fd 16 sendto 4110 bytes rfs_hdr =6

E/RIL     ( 1927): processRFS: received standalone RFS frame. len 10
E/RIL     ( 1927): get_wakelock: 1. on 0, ril_WakeLock_Mask 1
E/RIL ( 1927): get_wakelock: 2. on 0, ril_WakeLock_Mask 0
E/RIL ( 1927): set_wakelock: secril_rfs-interface 0
E/RIL ( 1927): [EVT]:Req(0), RX(0)
E/RIL ( 1927): ipc_recv_rfs()
E/RIL ( 1927): get_wakelock: 1. on 1, ril_WakeLock_Mask 0
E/RIL ( 1927): get_wakelock: 2. on 1, ril_WakeLock_Mask 1
E/RIL ( 1927): RxRFS_CloseFile:
E/RIL ( 1927): RxRFS_CloseFile: length 14
E/RIL ( 1927): TxRFS_CfrmCloseFile()
E/RIL ( 1927): TxRFS_CfrmCloseFile(): length 14
E/RIL     ( 1927): IPC_send_singleRfsIPC: fd 16 sendto 14 bytes rfs_hdr =6
Analiz
Aşağıdaki analiz, “system/lib/libsec-ril.so” konumundan Galaxy S3 (I9300) için CyanogenMod 10.1.3 sistem zip’inden çıkarılan “libsec-ril.so” ikili dosyası (tehlikeli sahipli yazılım) kullanılarak gerçekleştirildi.

Mevcut
analize dahil olan geliştiriciler, tehlikeli ikili kodun tersine
mühendislik ve kaynak koda dönüştürme işlemlerini açıkça yasaklayan
herhangi bir Son Kullanıcı Lisans Sözleşmesini kabul etmediler. Bu
bulgulara yol açan tersine mühendislik işlemleri, tehlikeli yazılım
yerine geçen özgür yazılım Samsung-RIL’in geliştirilmesi sırasında
gerçekleşti. Bu nedenle, bu işlemlerin rakip bir ürün yaratmak amacıyla
değil, yalnızca birlikte çalışabilirlik amacıyla yürütüldüğüne
inanıyoruz.


İlk yaklaşım olarak, tehlikeli programa karşı “strings” aracını kullanmak Samsung IPC protokol tanımları gibi görünen çok sayıda şüpheli komut adını ortaya çıkardı:

Code:
IPC_RFS_READ_FILE
IPC_RFS_WRITE_FILE
IPC_RFS_LSEEK_FILE
IPC_RFS_CLOSE_FILE
IPC_RFS_PUT_FILE
IPC_RFS_GET_FILE
IPC_RFS_RENAME_FILE
IPC_RFS_GET_FILE_INFO
IPC_RFS_UNLINK_FILE
IPC_RFS_MAKE_DIR
IPC_RFS_REMOVE_DIR
IPC_RFS_OPEN_DIR
IPC_RFS_READ_DIR
IPC_RFS_CLOSE_DIR
IPC_RFS_OPEN_FILE
IPC_RFS_FTRUNCATE_FILE
IPC_RFS_GET_HANDLE_INFO
IPC_RFS_CREATE_FILE
Bu komutların isimleri, modemin G/Ç işlemlerini gerçekleştirmesine izin verdiklerini açıkça ortaya koymaktadır.

Strings” yardımcı programı, bu komutların işlenmesini sağlıyor gibi görünen eşleşen işlev adlarını da ortaya çıkarır:

Code:
RxRFS_GetFile
RxRFS_CreateFile
RxRFS_ReadDirectory
RxRFS_OpenDirectory
RxRFS_RenameFile
RxRFS_Default
RxRFS_OpenFile
RxRFS_ReadFile
RxRFS_FtruncateFile
RxRFS_WriteFile
RxRFS_GetFileInfoByHandle
RxRFS_GetFileInfo
RxRFS_PutFile
RxRFS_LseekFile
RxRFS_CloseFile
RxRFS_DeleteFile
RxRFS_MakeDirectory
RxRFS_CloseDirectory
RxRFS_RemoveDirectory
TxRFS_CfrmCreateFile
TxRFS_CfrmPutFile
TxRFS_CfrmOpenDirectory
TxRFS_CfrmGetFileInfo
TxRFS_CfrmReadDirectory
TxRFS_CfrmRenameFile
TxRFS_CfrmCloseFile
TxRFS_CfrmFtruncateFile
TxRFS_CfrmGetFileInfoByHandle
TxRFS_CfrmDeleteFile
TxRFS_CfrmCloseDirectory
TxRFS_CfrmRemoveDirectory
TxRFS_CfrmMakeDirectory
TxRFS_CfrmGetFile
TxRFS_CfrmReadFile
TxRFS_CfrmWriteFile
TxRFS_CfrmLseekFile
TxRFS_CfrmOpenFile

Bu işlevlere objdump decompiler kullanılarak daha yakından bakıldığında bunların aslında modemden alınan mesajları işlediği görülen “process_ipc_notify_message” ile çağırılan “ipc_recv_rfs” işlevinden çağırıldıklarını ortaya çıkarır. Bu nedenle, tehlikeli işlevlerin aslında modem talebi üzerine çağrıldığı sonucuna varabiliriz.

Bu işlevlerden birine daha yakından bakalım, örneğin “RxRFS_ReadFile”, Prosedür Bağlantı Tablosuna (PLT) birden çok çağrıyı çıkarır. Bu nedenle, bu çağrıların libc kütüphanesindeki bağlantılı işlevler, özellikle (genel bir şekilde) açma, kapama, okuma, yazma vb. G/Ç ile ilgili işlevler olduğuna inanıyoruz.

Samsung IPC RFS mesajları
Aşağıdaki tablo, her Samsung IPC RFS mesajını onaltılık komut değeriyle ilişkilendirir:


Meşruiyet
Samsung IPC protokolünün tehlikeli RFS mesajlarının belirli bir meşruiyete veya ilgili kullanım durumuna sahip olmadığı görülmüştür. Ancak bunların arka kapı sağlayarak zarar verme niyeti olmadan meşru amaçlarla eklenmiş olması mümkündür. Yine de sonuç aynıdır ve modemin telefonun belleğine erişmesine izin verir.

Ancak, Samsung IPC protokolünün bazı RFS mesajları, modemin NV verileri olarak bilinen çok hassas bir dosyayı hedefledikleri için yasaldır (IPC_RFS_NV_READ_ITEM ve IPC_RFS_NV_WRITE_ITEM). Hem sahipli uygulama hem de özgür yazılım alternatifi, eylemleri söz konusu dosyayla sıkı bir şekilde sınırladığından, bunlar hakkında özel bir güvenlik endişesi olmamalıdır.

Çalışma alanları
•Samsung-RIL, istenen yol dahil olmak üzere arka kapı kullanılırken kullanıcıyı uyaran ve kullanıcıdan günlükleri kaydetmesini ve bizimle iletişime geçmesini isteyen bir mesaj gösterebilir.
•Alternatif olarak çekirdek, tehlikeli RFS isteklerini engelleyebilir ve bunların kayıt dökümlerinde izini sürebilir. Bu seçenek, tehlikeli sahipli “blob”un hala kullanıldığı CyanogenMod için işe yarayacaktır.
CyanogenMod’da arka kapı ile ilgili bir bildirim açıldı ancak herhangi bir işlem yapılmadı:

Notlar (Geçerliliği olmayan eski bilgi olabilir)
Tehlikeli ikilik kod için özgür yazılım alternatifi, libsamsung-ipc’ye dayanan Samsung-RIL’dir. Her ikisi de Replicant’ta kullanılır.

Etkilenen cihazlarda Samsung IPC protokolünü kullanan modemler, çoğunlukla Intel XMM6160 ve Intel XMM6260 modemleridir. Bu arka kapıya rağmen, bu modemleri kullanan cihazların Qualcomm platformlarını kullanan diğer cihazlara kıyasla büyük olasılıkla iyi modem izolasyonuna sahip olduğunu unutmayın. Bu arka kapının değiştirilebilir yazılımda uygulandığını ve tehlikeli yazılım için özgür bir alternatif yükleyerek, örneğin Replicant’ı yükleyerek kolayca kaldırılabileceğini unutmayın. Bu nedenle, tehlikeli cihazları bu arka kapı nedeniyle doğaları gereği kötü hedefler olarak görmüyoruz.
 
Top
Lütfen Javascript'i etkinleştirin!Javascript'i etkinleştirin!
"