Graf Chokolo, doğru düzgün kopya koruma sistemi geliştiremeyince çareyi Hacker'lara saldırmakta bulan Sony tarafından tehdit edilen bir PS3 Hacker'ı. Chokolo -tabii ki takma adı- Sony'i o kadar kızdırmış ki, Alman polisi bu arkadaşın evini tam iki kere bastı ve neyi var neyi yok el koydu. Fakat Chokolo, tüm bunların olacağını bildiği için dosyaları dünyanın en büyük okyanusuna, internete çoktan atmıştı bile. Chokolo şu an ne yapıyor bilmiyorum ama çalışmaları hala daha PS3'ün kırılmasına yeni gelişmelere sahne oluyor.
Bununla ilgili son gelişme de PS3'ün sabit disk şifrelemesinin kırılması oldu. flat_z ve glevand mahlaslı iki hacker'dan tersine mühendislik (RE/Reverse Engineering) konusunda yardım alan naehrwert, bir PC vasıtası ile PS3'ün sabit diskinin şifrelemesini nasıl kıracağımızın adımlarını yayınladı. Sütten ağzı yanan, yoğurdu üfleyerek yer hesabı, naehrwert, yöntem için "kanıtlamak amaçlı" diyor.
İşte PS3'ün sabit diskinin şifrelemesini nasıl kıracağınızın kanıtı:
Sabit Disk Şifreleme:
ATA anahtarlarının dökümünü alma:
Program
ATA tweak ve data XTS anahtarlarını spuisofs ile PPU belleğine atacak olan SPU programı:
Sonuç
Test
Sabit diskteki şifrelenmiş ilk sektörden çıkan sonuç:
ENCDEC anahtarlarının dökümünü almak:
ENCDEC Key Seed'leri
Data key seed:
Tweak key seed:
Program - ENCDEC anahtarlarını elde etmek için kullanılan SPU programı:
Linux 3.5.1 üzerinde spuldrfs ile test sürüşü:
Test
VFLASH'taki şifrelenmiş ilk sektörden çıkan sonuç:
Bununla ilgili son gelişme de PS3'ün sabit disk şifrelemesinin kırılması oldu. flat_z ve glevand mahlaslı iki hacker'dan tersine mühendislik (RE/Reverse Engineering) konusunda yardım alan naehrwert, bir PC vasıtası ile PS3'ün sabit diskinin şifrelemesini nasıl kıracağımızın adımlarını yayınladı. Sütten ağzı yanan, yoğurdu üfleyerek yer hesabı, naehrwert, yöntem için "kanıtlamak amaçlı" diyor.
İşte PS3'ün sabit diskinin şifrelemesini nasıl kıracağınızın kanıtı:
- Aşağıdaki bilgiler LV1'deki LPAR1'de yer alan Depolama Yöneticisi ve sb_iso_spu_module.self'ten tersine mühendislik yöntemi ile elde edilmiştir.
- Bu yöntem ile hacker, kendi PS3 sabit diskinin ve VFLASH'ının şifresini PC vasıtası ile kırmıştır
Sabit Disk Şifreleme:
- PS3'ün sabit diskindeki verileri şifrelemek için XTS-AES-128 kullanılmaktadır.
- XTS, CBC değildir! XOR işlemi ile ayarlanmış AES-ECB'dir. AES-CBC sabit disk şifreleme için pratik bir yöntem değildir. Her bir sektör, diğer sektörlerden bağımsız olarak çözülüp şifrelenebilir.
- XTS-AES hakkında faydalı bilgiler: ntnu.diva-portal.org/smash/get/diva2:347753/FULLTEXT01
- VFLASH iki defa şifrelenmiştir. İlki ENCDEC anahtarlarıyla ve ardından ATA anahtarlarıyla.
- Tweak ve data XTS anahtarları 32 byte boyutundadır fakat sadece ile 16 byte kullanılmaktadır.
- ATA anahtarlarını HDD/VFLASH şifrelemesini test etmek için kullanılan Linux ps3encdec aygıt sürücüsü ile belirleyip kaldırabilirsiniz. Dikkatli olmanızda fayda var. sabit disk bölegeleri veya bölümleri sisteme yerleştirilmişken ATA anahtarları belirleyip kaldırmayın. Sabit diskteki verileri bozabilirsiniz!
ATA anahtarlarının dökümünü alma:
- sb_iso_spu_module.self modülü ATA anahtarlarını dump edecek şekilde modifiye edilmiştir.
- Anahtarlar sb_iso_spu_module.self modülüne parametre şeklinde iletilecektir
Program
ATA tweak ve data XTS anahtarlarını spuisofs ile PPU belleğine atacak olan SPU programı:
Kod:
/*
* Dump ENCDEC keys
*
* Copyright (C) 2012 glevand <geoffrey.levand@mail.ru>
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published
* by the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
.text
start:
ila $2, 0x3dfa0
lr $sp, $2
ila $3, 0x666
wrch $ch30, $3
# wait until we get message from PPU
1:
brsl $lr, 0x54 # in_mbox_count
brz $3, 1b
brsl $lr, 0x54 # in_mbox_read
ila $80, 0x3e000
lqd $81, 0($80) # load PPU EA
ila $82, 0x0
lqd $83, 0($82)
stqd $83, 0($80) # store upper 16bytes of ENCDEC key
lqd $83, 0x10($82)
stqd $83, 0x10($80) # store lower 16bytes of ENCDEC key
lqd $83, 0x20($82)
stqd $83, 0x20($80) # store ENCDEC IV
lr $3, $80
lr $4, $81
il $5, 0x30
il $6, 0x7
il $7, 0x20
brsl $lr, 0x20 # mfc_dma_xfer
il $3, 0x7
brsl $lr, 0x38 # mfc_dma_wait
stop 0x666 # our evil stop code
/*
* no input parameters
*/
in_mbox_count:
rchcnt $3, $ch29
bi $lr
/*
* no input parameters
*/
in_mbox_read:
rdch $3, $ch29
bi $lr
/*
* r3 - LSA
* r4 - EA
* r5 - size
* r6 - tag
* r7 - cmd
*/
mfc_dma_xfer:
wrch $ch16, $3
wrch $ch17, $4
shlqbyi $4, $4, 4
wrch $ch18, $4
wrch $ch19, $5
wrch $ch20, $6
wrch $ch21, $7
bi $lr
/*
* r3 - tag
*/
mfc_dma_wait:
il $2, 0
nop $127
hbra 2f, 1f
wrch $ch23, $2
1:
rchcnt $2, $ch23
ceqi $2, $2, 1
nop $127
nop $127
nop $127
nop $127
nop $127
2:
brz $2, 1b
hbr 3f, $lr
rdch $2, $ch24
il $2, 1
shl $2, $2, $3
wrch $ch22, $2
il $2, 2
wrch $ch23, $2
rdch $2, $ch24
nop $127
3:
bi $lr
Sonuç
Kod:
glevand@debian:~/dump_encdec_keys$ ./dump_encdec_keys ../ps3/metldr ../dump_encdec_keys.self
spuldrfs found at /mnt
buf1 kernel virtual address d000000004311000
buf2 kernel virtual address d000000004412000
priv2: puint_mb_R 1
problem: pu_mb_R 1
priv2: puint_mb_R 666
problem: spu_status_R 2
glevand@debian:~/dump_encdec_keys$ hexdump -C /mnt/buf2
...
Here are your ENCDEC keys
ENCDEC keys key is at offset 0x0 (32 bytes)
ENCDEC keys IV is at offset 0x20 (16 bytes)
...
Test
- ATA XTS tweak ve data anahtarlarınızı test etmek için şifrelenmiş sabit disk sektörlerine ihtiyacınız var. İster sabit diskinizi PC'ye bağlayıp dökümünü alabilir, isterseniz de Linux üzerinde ps3vuart-tools kullanıp ATA anahtarlarını temizledikten sonra ps3da'dan döküm alabilirsiniz. Her iki yol da denendi. Fakat ps3vuart-tools ile ATA anahtarlarınızı temizlemeden önce bütün sabit disk bölgelerini monut ettiğinizden emin olun .
- XTS-AES şifreleme ve çözme için ufak bir uygulama kodlanmış durumda. XTS-AES yazısı bunu uygulamak için güzel bir rehber.
- Doğru sonuçları elde etmek için doğru sektör numaralarını atlamanız gerek.
- Aşağıdaki örneklerde de göreceğiniz üzere VFLASH için sektör numarası olarak 0 ve 8 atlanıyor. Çünkü VFLASH sabit diskte 8. sektörden itibaren başlıyor.
- Bir başka ilginç nokta da, sabit disk bölümlerini şifreleme ve çözme sonrası yarım-kelimelerin yerini değiştirmeniz gerek. Aksi takdirde yanlış sonuçlar elde edeceksiniz. VFLASH sektörleri için bu değişiklik mecburi değil.
- Bir başka nokta da, VFLASH sektörlerini ilk olarak ATA anahtarları ile çözmeniz gerek, ardından ENCDEC anahtarlarını kullanabilirsiniz.
Sabit diskteki şifrelenmiş ilk sektörden çıkan sonuç:
Kod:
glevand@debian:~/xts_aes$ cat ../hdd_1st_sector_enc.bin | \
./xts_aes -d -k <your ATA XTS data key> -t <your ATA XTS tweak key> -s 0 -r | hexdump -C
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000010 00 00 00 00 0f ac e0 ff 00 00 00 00 de ad fa ce |................|
00000020 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 02 |................|
00000030 00 00 00 00 00 00 00 08 00 00 00 00 00 08 00 00 |................|
00000040 10 70 00 00 01 00 00 01 00 00 00 00 00 00 00 0b |.p..............|
00000050 10 70 00 00 02 00 00 01 00 00 00 00 00 00 00 03 |.p..............|
00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000000c0 00 00 00 00 00 08 00 10 00 00 00 00 03 9a 8b 2d |...............-|
000000d0 10 70 00 00 01 00 00 01 00 00 00 00 00 00 00 03 |.p..............|
000000e0 10 70 00 00 02 00 00 01 00 00 00 00 00 00 00 03 |.p..............|
000000f0 10 20 00 00 03 00 00 01 00 00 00 00 00 00 00 03 |. ..............|
00000100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000150 00 00 00 00 03 a2 8b 45 00 00 00 00 00 3f ff f8 |.......E.....?..|
00000160 10 70 00 00 01 00 00 01 00 00 00 00 00 00 00 03 |.p..............|
00000170 10 70 00 00 02 00 00 01 00 00 00 00 00 00 00 03 |.p..............|
00000180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001e0 00 00 00 00 03 e2 8b 46 00 00 00 00 19 39 ce 0c |.......F.....9..|
000001f0 10 70 00 00 02 00 00 01 00 00 00 00 00 00 00 03 |.p..............|
00000200
ENCDEC anahtarlarının dökümünü almak:
- VFLASH iki kere şifrelenmiştir demiştik. İlk olarak ENCDEC anahtarlarıyla ve ardından da ATA anahtarlarıyla.
- sb_iso_spu_module.self ile ENCDEC anahtarlarının dökümünü alamazsınız. Zira anahtarlar sadece lv1ldr'de değiller (Ayrıntılı bilgi için: gitorious.ps3dev.net/reversing/lv1ldr/trees/master).
- Bu iş için modifiye edilmiş bir lv1ldr ve Linux spuldrfs sürücüsü kullanıldı.
- XTS-AES-128 ile 128bit tweak key ve 128bit data key, aynen ATA anahtarları gibi.
- lv1ldr'ye iletilen ENCDEC tweak ve data key'leri düz metin biçiminde değil.
- ENCDEC anahtarları lv1ldr tarafından AES-CBC-256 ile 32byte seed'ler şifrelenrer-k hesaplandı.
- metldr'dan lv1ldr AES-CBC-256 IV'e geçer ve ENCDEC anahtarlarını açar.
- ENCDEC anahtarları ps3encdec Linux sürücüsü ile test edilip tekrar ayarlandı ve VFLASH hala sorunsuz çalışıyordu. Anahtarın içinde bazı bitleri değiştirir değiştirmez VFLASH artık kırılamıyordu. Bu da demek oluyor ki anahtarlar doğru.
ENCDEC Key Seed'leri
- Dökümü alınmış ENCDEC IV ve anahtarını kullanarak seed'lerin şifresini çözün. Böylece VFLASH için ENCDEC anahtarlarınızı elde edeceksiniz.
- Söz konusu seed'leri lv1ldr'da bulabilirsiniz.
Data key seed:
Kod:
glevand@debian:~$ hexdump -C data1.bin
00000000 e2 d0 5d 40 71 94 5b 01 c3 6d 51 51 e8 8c b8 33 |..]@q.[..mQQ...3|
00000010 4a aa 29 80 81 d8 c4 4f 18 5d c6 60 ed 57 56 86 |J.)....O.].`.WV.|
00000020
Tweak key seed:
Kod:
glevand@debian:~$ hexdump -C data2.bin
00000000 02 08 32 92 c3 05 d5 38 bc 50 e6 99 71 0c 0a 3e |..2....8.P..q..>|
00000010 55 f5 1c ba a5 35 a3 80 30 b6 7f 79 c9 05 bd a3 |U....5..0..y....|
00000020
Program - ENCDEC anahtarlarını elde etmek için kullanılan SPU programı:
Kod:
/*
* Dump ENCDEC keys
*
* Copyright (C) 2012 glevand <geoffrey.levand@mail.ru>
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published
* by the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
.text
start:
ila $2, 0x3dfa0
lr $sp, $2
ila $3, 0x666
wrch $ch30, $3
# wait until we get message from PPU
1:
brsl $lr, 0x54 # in_mbox_count
brz $3, 1b
brsl $lr, 0x54 # in_mbox_read
ila $80, 0x3e000
lqd $81, 0($80) # load PPU EA
ila $82, 0x0
lqd $83, 0($82)
stqd $83, 0($80) # store upper 16bytes of ENCDEC key
lqd $83, 0x10($82)
stqd $83, 0x10($80) # store lower 16bytes of ENCDEC key
lqd $83, 0x20($82)
stqd $83, 0x20($80) # store ENCDEC IV
lr $3, $80
lr $4, $81
il $5, 0x30
il $6, 0x7
il $7, 0x20
brsl $lr, 0x20 # mfc_dma_xfer
il $3, 0x7
brsl $lr, 0x38 # mfc_dma_wait
stop 0x666 # our evil stop code
/*
* no input parameters
*/
in_mbox_count:
rchcnt $3, $ch29
bi $lr
/*
* no input parameters
*/
in_mbox_read:
rdch $3, $ch29
bi $lr
/*
* r3 - LSA
* r4 - EA
* r5 - size
* r6 - tag
* r7 - cmd
*/
mfc_dma_xfer:
wrch $ch16, $3
wrch $ch17, $4
shlqbyi $4, $4, 4
wrch $ch18, $4
wrch $ch19, $5
wrch $ch20, $6
wrch $ch21, $7
bi $lr
/*
* r3 - tag
*/
mfc_dma_wait:
il $2, 0
nop $127
hbra 2f, 1f
wrch $ch23, $2
1:
rchcnt $2, $ch23
ceqi $2, $2, 1
nop $127
nop $127
nop $127
nop $127
nop $127
2:
brz $2, 1b
hbr 3f, $lr
rdch $2, $ch24
il $2, 1
shl $2, $2, $3
wrch $ch22, $2
il $2, 2
wrch $ch23, $2
rdch $2, $ch24
nop $127
3:
bi $lr
Linux 3.5.1 üzerinde spuldrfs ile test sürüşü:
Kod:
glevand@debian:~/dump_encdec_keys$ ./dump_encdec_keys ../ps3/metldr ../dump_encdec_keys.self
spuldrfs found at /mnt
buf1 kernel virtual address d000000004311000
buf2 kernel virtual address d000000004412000
priv2: puint_mb_R 1
problem: pu_mb_R 1
priv2: puint_mb_R 666
problem: spu_status_R 2
glevand@debian:~/dump_encdec_keys$ hexdump -C /mnt/buf2
...
Here are your ENCDEC keys
ENCDEC keys key is at offset 0x0 (32 bytes)
ENCDEC keys IV is at offset 0x20 (16 bytes)
...
Test
- ENCDEC XTS tweak ve data keylerini test etmek için şifrelenmiş VFLASH sektörlerine ihtiyacınız var. Sektör 8 ile başlayarak ps3da'dan elde edebilirsiniz.
- Doğru sonuçları elde etmek için doğru sektörleri atlamalısınız.
- Örnekte de görüldüğü gibi sektör 8 atlanmıştır zira VFLASH sabit diskte bu sektör ile başlar.
- Giriş sektörü halihazırda ATA anahtarları ile çözülmüştü.
VFLASH'taki şifrelenmiş ilk sektörden çıkan sonuç:
Kod:
glevand@debian:~/xts_aes$ cat ../vflash_1st_sector_enc.bin | \
./xts_aes -d -k <your ENCDEC data key> -t <your ENCDEC tweak key> -s 8 | hexdump -C
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000010 00 00 00 00 0f ac e0 ff 00 00 00 00 de ad fa ce |................|
00000020 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 02 |................|
00000030 00 00 00 00 00 00 00 08 00 00 00 00 00 00 75 f8 |..............u.|
00000040 10 70 00 00 01 00 00 01 00 00 00 00 00 00 00 03 |.p..............|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000000c0 00 00 00 00 00 00 78 00 00 00 00 00 00 06 3e 00 |......x.......>.|
000000d0 10 70 00 00 02 00 00 01 00 00 00 00 00 00 00 03 |.p..............|
000000e0 10 70 00 00 01 00 00 01 00 00 00 00 00 00 00 03 |.p..............|
000000f0 10 20 00 00 03 00 00 01 00 00 00 00 00 00 00 01 |. ..............|
00000100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000150 00 00 00 00 00 06 b6 00 00 00 00 00 00 00 80 00 |................|
00000160 10 70 00 00 02 00 00 01 00 00 00 00 00 00 00 03 |.p..............|
00000170 10 70 00 00 01 00 00 01 00 00 00 00 00 00 00 03 |.p..............|
00000180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001e0 00 00 00 00 00 07 36 00 00 00 00 00 00 00 04 00 |......6.........|
000001f0 10 70 00 00 02 00 00 01 00 00 00 00 00 00 00 03 |.p..............|
00000200