PlayStation 3 mym kryptograficznym okiem

Na wstępie nieco asekuracyjnie napiszę, że nie jestem wybitnym specjalistą od tak doskonale zabezpieczonej platformy sprzętowej jaką jest Playstation 3. Konsolę (PS3 Slim 250GB) kupiłem po części z ciekawości, tudzież z chęci posiadania wygodnego bezprzewodowego pada. W posiadaniu konsoli jestem od połowy lutego 2010. Przez ten dość krótki okres użytkowania (głownie naruszania integralności sprzętowo-programowej) poczyniłem kilka spostrzeżeń.

Wewnętrzny system plików PS3
Jeżeli ktokolwiek nosi się z zamiarem zapytania na jakimkolwiek forum jaki jest wewnętrzny system plików konsoli - to odradzam. Kompetentnych osób na owych forach jest jak na lekarstwo.
Prawda jest taka, że nie jest to żaden FAT, NTFS, EXT3 czy inny w miarę popularny system. W PS3 na dysku rezyduje sobie zaprojektowany przez IBM'a Journaled File System. Nie byłoby w tym nic strasznego (wszak systemy *nix bezproblemowo obsługują JFS) gdyby nie malutki drobny fakt. System plików jest zaszyfrowany 256-bitowym AES'em. Jako, że w samym JFS'ie nie uświadczymy natywnych mechanizmów przezroczystego (dla systemu operacyjnego) szyfrowania, zatem funkcjonalność taka musi być dostarczana przez system operacyjny. Dla tych, którzy nie orientują się w złożoności obliczeniowej przed jaką stajemy próbując złamać szyfr blokowy jakim jest AES z 256-bitowym kluczem, mogę póki co użyć tylko jednego słowa "niemożliwe". A słowa tego używam z premedytacją z dwóch powodów. Po pierwsze aby złamać taki szyfr metodą kolejnych prób, wykorzystując cały obecny ziemski potencjał obliczeniowy zeszłoby nam ze 20 lat. Po drugie, na horyzoncie nie widać żadnej skutecznej metody ataku na AES'a.
Więc po co o tym w ogóle wspominam? Bo chyba znalazłem metodę pozyskania kluczy. A na pewno potrafię odczytać zawartość plików z dysku.

Zatem jak ugryźć 256-bitowego AES'a?
W typowej sytuacji gdy posiadamy sam kryptogram (dysk SATA wyjęty z PS3) i chcemy poznać zawartość zaszyfrowanych danych bylibyśmy, że tak powiem "udupieni". Ale życie niezwykle rzadko jest typowe, tym bardziej gdy zaczynamy kombinować jak koń pod górę.
Nam przecież nie zależy na poznaniu danych - bo te znamy. Zaraz usłyszę "Jak to znamy?!", "Ale o zo hodzi?". Zależy nam na poznaniu klucza.
Już pędzę z wyjaśnieniami:
  1. Radziłbym zaopatrzyć się w dodatkowy dysk SATA 2,5". Nie chcemy przecież, aby Wasze cenne dane w trakcie tej kryptograficznej zabawy uległy bezpowrotnej utracie. Nie musi to być duży dysk. Moja PS3 z wdzięcznością przyjęła 40GB, pomachała ogonkiem i zadomowiła się na dobre.
  2. Jak wszystko ucichnie (po instalacji) pożyczamy sobie "nośnik wymienny" - mowa tu o naszym nowym dysku - i podpinamy pod inną maszynę. Zwyczajowo jest to komputer klasy PC wyposażony w złącze SATA i system Linux.
  3. Z pomocą dość starego i zużytego narzędzia dd robimy obraz dysku.
  4. Odpinamy "nośnik wymienny" i podpinamy go do PS3.
  5. Z pomocą klucza USB wrzucamy na dysk konsoli rozsądnie duży plik. Powiedziałbym, że w moim przypadku 3GB sprawdziło się wyśmienicie.
  6. Odpinamy od konsoli "nośnik wymienny" i podpinamy z powrotem do PC.
  7. Z pomocą dość starego i zużytego narzędzia dd robimy obraz dysku.
Czy jest jeszcze ktoś na sali kto nie załapał co się właśnie stało? Jesteśmy w posiadaniu dwóch obrazów naszego "nośnika wymiennego". Pierwszy pokazuje nam kupę zaszyfrowanych danych. Drugi zaś pokazuje nam kupę zaszyfrowanych danych wzbogaconych o zaszyfrowane rodzynki. Ha! Robimy najzwyklejszego binarnego diff'a i szukamy dużej 3GB zmiany . Ta różnica pomiędzy nośnikami to nasz plik, który tak hojnie pozwoliliśmy konsoli skopiować (czyt. zaszyfrować). Jako, że Rijndael, jest szyfrem symetrycznym i blokowym, to co widać w pliku różnicowym odpowiada dokładnie zawartości naszego pliku niezaszyfrowanego. A jest tak z uwagi na poniższe fakty:
  • AES operuje na 16 bajtowych (128 bit) blokach danych;
  • i-węzły w JFS'ie rozmieszczone są co 512 bajtów;
  • pliki są z reguły alokowane na początku i-węzła;
Zatem co mamy? Kryptogram i odpowiadające mu dane. Czego potrzebujemy? Klucza. Jakieś pomysły na szybkie i w miarę bezbolesne jego pozyskanie? Przez "szybkie i bezbolesne" rozumiem miesiąc obliczeń dysponując mocą obliczeniową ~ 10 TFLOPS.

Ale zaraz! Pan ㄘㄧㄖㄎ wspominał, że potrafi odczytać zawartość plików!
Może nie tyle ja potrafię, o ile konsola robi to sama. I to bardzo chętnie. Pamiętacie punkt 7? To lecimy dalej:
  1. Robimy binarną różnicę aby zorientować się gdzie znajduje się nasz plik.
  2. Zaznaczamy "dowolny" obszar zaszyfrowanego obrazu pamiętając, że systemem docelowym jest JFS i trochę szacunku dla i-węzłów się należy. Dowolność ma ograniczenie wynikające z wielkości przesłanego pliku na konsolę.
  3. Wklejamy nasz "dowolny" obszar w miejsce naszego pliku.
  4. Odpinamy "nośnik wymienny" od PC i podłączamy do PS3.
  5. Jak gdyby nigdy nic prosimy grzecznie konsolę aby skopiowała nam nasz plik z powrotem na klucz USB.
Konsola grzecznie go skopiuje, a przed skopiowaniem rzecz jasna odszyfruje. Zawartość pliku jednak będzie już inna. Niezłe, nieprawdaż?

Dlaczego klucz jest taki ważny?
Bo przy odrobinie pracy posiadając klucz można by podpiąć "nośnik wymienny" do PC i montować taki nośnik pod Linuksem. Z prawami odczytu, zapisu i wszystkimi innymi JFS'owymi bajerami. A to otwiera kilka nowych drzwi. Dam jeszcze znać co w mej Plejstacji słychać.

Hej Φ! Mało zadziorna ta moja publicystyka, co?