PS3가 이번에 lv0 공개키와 비밀키가 유출되었다고 하는 소식이 들려왔습니다.
올것이 왔다는 반응과 함께 3.56 펌웨어 이상에서도 이제 복돌이들이 설치는 것 아니냐하는 우려도 있습니다.
사실 이 뉴스를 전한 wololo 인가 하는 블로거가 일부 잘못 전달한 부분이 있습니다. 뉴스에서 lv0키라고 하는 키는
bootldr 키입니다. 너무 흥분해서 잘못 전달했는지, 몰라서 그런건지는 잘 모르겠습니다. 몰라서 그런거라면 wololo 그 사람도
대단한 해커는 아닐 듯 하군요.
그럼 간단하게 5년동안 각종 해킹시도에서도 끄떡없던 PS3가 이렇게 허무하게 해킹을 당하기 시작했는지 간단하게 설명을 해보겠습니다.
그걸 알아야 왜 이 키가 bootldr 키이고, lv0 가 아닌지, 어떤 의미가 있는지를 알 수 있으니까요.
GeoHot의 도전
본격적인 PS3 해킹이 이루어지기 시작한 것은 여러분도 잘 아시는 Geohot 이 PS3 리눅스를 통해 파고들면서 시작되었습니다.
사실 PS3 자체의 소프트웨어 보안은 매우 잘되어있습니다. 겹겹이 설치된 보안 레이어 하며, 하이퍼바이저등 소프트웨어 방법으로는 답이
없는 상황이었습니다. 많은 해커들이 other os기능을 통해 설치한 리눅스를 통해 소프트웨어적인 방법으로 도전을 했지만, 하이퍼바이저가
그런 시도 자체를 차단하면서, Ps3 보안레이어 구조조차 파악하기 어려웠습니다. 그렇게 4년이상 시간이 흘러간 것입니다.
그러다가 Geohot 이 내가 Ps3 보안을 깨보겠다고 나섰는데, 방법은 의외로 많은 해커들이 포기했던 하드웨어 헛점을 파고든 방법이었습니다.
기판 뒷편 배선에 전선을 연결한 다음에 쓰레기 데이터를 흘려넣어 하이퍼바이저를 다운시키는 것에 성공한 것입니다. 일단 하이퍼바이저의
감시가 사라지면서, Geohot이 드디어 리눅스를 통해 ps3 메모리에 올라간 보안 소프트웨어 구조를 파악하는데 성공한 것입니다. 메모리상에
올라간 몇몇 공개키들을 덤프해서 다운받기도 했으니까요.
여기서 공개키란 소프트웨어를 실행하기 위해 클라이언트에 배포되는 키입니다. 이 키는 애초에 배포를 목적으로 한 키이기 때문에 받아봐야
큰 의미가 없습니다. 실행만 할 수 있고, 실행 권한을 넘어서는 행동 즉 프로그램을 변경한다던가, 그 공개키와 쌍을 이루는 비밀키로 암호화 되지않은
프로그램은 실행할 수가 없습니다. 비밀키는 소니만이 가지고 있지요. 여러분의 인터넷 뱅킹을 위한 공인인증서 개개인이 가지고 있잖아요?
그것이 비밀키입니다. 은행은 거기에 쌍을 이루는 공개키를 가지고 있구요. 공개키는 은행들이 다 가지고 있기 때문에 여러분이 공인인증서
하나를 가지고 모든 은행에 다 로그인 할 수 있는 것입니다. 하지만, 공개키로는 은행이 여러분 계좌를 들여다 보거나 이체는 불가능하지요.
비밀키인 여러분의 공인인증서가 없으면요. 그래서 공인인증서를 잘 관리해야하는 것이지요.
그리고 공개키와 짝을 이루는 비밀키는 수학적으로 연산이 거의 불가능합니다. 그래서 공개키로 비밀키 유추하는 것은 양자컴퓨터가 있어야
가능하다고 하지요. 128비트 이상의 암호는 수퍼컴으로 수십~수백년을 돌려야 비밀키를 유추할 수 있다고 합니다.
자 그러면 여기까지 geohot의 해킹 자체는 아직 쓸모가 없었습니다. 유출되어봐야 공개키니까요.
물론 소니는 혹시나 하는 마음에 아예 other OS를 없애버렸지요. geohot의 방식을 통해 다른 해커들이 PS3의 구조를
엿보는것 조차 막기 위해서요.
랜덤페일(Random fail)
그런데 이 시점에서 geohot의 해킹으로 리눅스를 PS3의 메모리를 엿본 한 해커그룹이 소니가 발칵 뒤집힐 발견을 합니다.
바로 fail0verflow 라는 해킹 그룹(Wii를 해킹했다고 합니다.)이 2010년 12월 The 27th annual Chaos Communication Conference 라는
곳에서 소니의 난수 발생 코드가 사실은 계속 똑같은 숫자만 뱉어낸다는 사실을 발표한 것입니다.
난수는 사실 모든 암호 알고리즘에서 가장 중요한 역할을 합니다. 그래서 소프트웨어도 못믿어서 하드웨어 난수 발생기(인텔)를 사용하는
판에 소니가 만든 모든 암호키에 사용하는 난수가 사실은 다 똑같은 수였던 것입니다. 어떤 난수인지도 밝혀졌다고 합니다.
이로 인해서 이제는 소니의 공개키들만 있으면 짝을 이루는 비밀키를 초등학생도 하는 방정식을 통해 계산하는 것이 가능해졌습니다.
아마 소니의 암호 프로그래머가 테스트를 위해 만든 코드를 깜빡하고 계속 사용한듯 합니다. 문제는 이 난수 발생 함수로 만든 공개키가
소니의 펌웨어, 그리고 Cell 내부에도 들어가 있었다는 것입니다. 물론 PSP에도요.
여파는 엄청났습니다. 우선 PSP는 완전히 보안체계가 nds 와 Wii 수준으로 붕괴되어버렸습니다. 일본을 제외한
다른 모든 시장에서 PSP에 사망선고가 내려진 것이지요.
다만 PS3는 좀 상황이 달랐습니다.
아래의 그림은 PS3 의 3.55 이전 펌웨어의 공개 키 구조입니다.
두개의 root 가 보일 겁니다. metldr 과 bootldr 입니다. 이 두개의 공개키는 PSP와 달리 cell 내부의 spe에 숨겨져 있는 공개키입니다.
이외의 다른 키들은 메모리 상에 있기 때문에 리눅스를 통해 덤프하면, 비밀키 추출이 가능하지요. 관건은 우선 게임 실행에 관여하는
metldr 공개키를 SPE에서 추출하는 것이었습니다. 추출만 하면 PS3는 완전 PSP 꼴이 나는 것이었습니다.
다만 SPE 내부의 공개키를 들여다 볼 방법이 없기 때문에, USB 버그를 이용한 하드로더가 나오게 됩니다.
이 시점에서 Geohot 이 불가능할 것 같던 metldr 키를 SPE 공개키를 USB 버그를 이용하여 추출하는데에 성공합니다.(이부분은 정확히 어떤 방법인지 미공개)
그 시점에서 해커들은 PS3 가 끝났다고 다들 떠들었습니다. 그리고
실제로 3.55 커스텀 펌웨어가 나오고 하드로더가 나오면서 상황이 끝난듯 했습니다.
소니의 반격
그런데 소니 역시 호락호락하지 않았습니다.
다행히 geohot 이 정확이 어떻게 metldr을 추출했는지 인터넷에 공개하지 않은 점에 주목했습니다. 위의 다이어그램에 보면 spe 내부에 숨어있는
공개키 bootldr은 초기 부팅시에만 사용하고 별다른 역할을 하지않습니다. 이때문에 geohot도 metldr만 추출하고 PS3를 완전 해킹했다고 선언
한 것입니다.
소니는 바로 geohot에 소송을 걸었습니다. 그리고 신속하게 합의를 해주면서 geohot 이 앞으로 ps3를 살 수도 보유할 수도 없고, ps3 해킹에대해 공개적으로
떠벌리거나, 활동할 수도 없고, 위반시 법적 책임과 막대한 피해보상을 하는 조건을 내겁니다. 그리고 geohot 은 이후 ps3 해킹 전선에서 완전히
사라집니다. 본인의 공명심과 이름을 내거는 것이 우선인 친구라 몰래 활동도 안한듯 합니다.
그 다음에 소니는 3.60 펌웨어부터 공개키 구조를 아래 그림처럼 바꿔 버렸습니다.
다른 SPE에 숨어 있는 bootldr 공개키를 이용해서 lv0 공개키를 metldr을 대신한 새로운 게임실행 루트키로 설정해 버린것입니다.
metldr은 SPE 내부에 eFuse라는 내부의 전선을 전기적으로 태워서 회로에 데이터를 새기는 방식으로 공개키가 심어져있기에 아예 업데이트가
안됩니다. 이미 비밀키까지 공개된 공개키는 쓸모가 없기에 그냥 사용안해버린것입니다.
그리고 lv0 공개키는 문제를 수정한 난수 발생 함수를 통해 새로 발행한 상태입니다. 비밀키 유추나 계산이 정상적으로는 불가능한 키입니다.
물론 lv0의 각각의 게임 실행에 관여하는 모든 키들도 새로이 공개키를 발행해버렸습니다.
더불어 USB 버그를 차단합니다.
일단 이렇게 되자 상황이 완전히 반전되어 버립니다.
3.55 이전 펌웨어의 경우 USB 버그, metldr 비밀키 유출로 완전히 무장해제되었다고 해도 과언이 아닌 PS3. 하지만 3.60으로 넘어가면서
bootldr을 이용하여 펌웨어를 암호화 하여, 펌웨어 해석을 막아버림은 물론, lv0를 비롯한 모든 업데이트 가능한 공개키를 교체하고, usb 버그를
틀어막아버리자, 다시 해킹이 불가능해진것입니다.
해커들은 이제 bootldr 키가 metldr 과 마찬가지로 업데이트가 불가능한 점에 주목하고 bootldr키를 에타게 찾아나섭니다.
그렇게 18개월 정도가 지난 지금 마침내 bootldr 공개키를 SPE에서 덤프해버립니다. 그게 wololo가 말한 lv0 키입니다.
하지만 lv0 키일수가 없는게 lv0 키는 아무 의미가 없기 때문입니다. 소니가 언제든지 펌웨어 업데이트를 교체할 수 있는 키이며 공개키이기 때문이죠.
비밀키를 알아야 의미가 있죠.
Cell의 SPE에 새겨진 bootldr 키야말로 소니가 펌웨어 업데이트를 통해 교체할 수가 없는 키이며, 비밀키를 알 수 있습니다.
다만, 해커들과 잠재적 복돌이들의 환호와 달리 이게 PS3 해킹에 큰 의미가 없는 상태입니다. 우선 최초 해킹에서 18개월 정도 지나면서 상당수 유저들이
3.60이상의 펌웨어를 가지고 있다는 점입니다.
bootldr키가 무력화 되었지만, 사실 bootldr은 부팅하면서 lv0 키를 검사하고 메모리에 올리는 역할만 하는 키입니다. 그런데 lv0 공개키의 비밀키는 소니가
문제를 수정한 상태라 계산이 불가능합니다.
이 메모리에 올라간 lv0가 게임실행의 루트역할을 하며, 3.56 이상의 펌웨어 업데이트 파일 역시 lv0키를 이용해서 암호화된 상태입니다.
소니가 현명하게도 bootldr도 조만간 유출될 거라 보고 lv0 키에 게임 실행의 루트를 맡긴 겁니다.
일단 lv0가 메모리에 올라가면 bootldr은 역할이 끝나는 것입니다. 커펌을 하려면 lv0 비밀키로 암호화한 파일을 실행해야하는데, 이제 lv0 비밀키를 얻을 방법은
없으니까. 3.56 정펌이상에서는 아예 다운그레이드가 봉쇄되는 것입니다.
3.60 이상의 펌웨어 다운그레이드를 위해서는 이 메모리에 올라간 lv0 공개키를 커펌 실행이 가능한 공개키로 교체해야할텐데, otherOS가 막혀 geohot의 해킹방법이
막힌 이상 그 이상의 새로운 방법이 없으면 불가능합니다. 이미 소프트웨어를 이용한 방법은 5년동안 하이퍼 바이저의 방어조차 뚫지 못하는 것으로
결론이 난 상태입니다.
하이퍼 바이저를 통과할 수 있는 USB 버그를 이용한 동글방식은 이미 막힌 상태이구요.
즉 소니가 lv0 공개키를 교체하고, other os 를 삭제하고, usb 버그를 막은 이상 다시 소프트웨어를 통해서 펌웨어 다운그래이드를 하는 것이 불가능합니다.
유일한 가능성은 모델명 3000 아래 PS3의 경우 뚜껑을 열고 펌웨어가 심어져 있는 플래쉬 메모리를 하드웨어 플래쉬 라이터로 직접 커스텀 펌웨어로
교체하는 방법입니다. 이게 아니라면 다시 USB 버그 같은 보안 헛점을 찾아야합니다.
이번 해킹에 대한 결론
결론을 말씀드리자면, 3.56 이후 버전을 가진 사용자들은 이제 하드웨어 플래쉬 라이터로 펌웨어를 PS3 뚜껑을 열고 교체할 수 있습니다. bootldr이
플래쉬라이터로 펌웨어(lv0 키) 교체했는지 감시하는 역할을 하는데 이게 무력화된 상태입니다. 일반적인 사용자들은 엄두도 못내는 방식입니다. 이것 말고는
달라진게 없습니다.
3.60 이후 소니 펌웨어의 암호화 해제가 bootldr 키(이 키는 오직 이 역할만 합니다.)를 발견하면서 이제 PC에서 간단하게 열어볼 수 있어서 커펌의
4.x 버전 개발이 손쉬워졌습니다.
그리고 PS3 3000번대 이후는 Cell의 metldr 과 bootldr 의 키가 문제없는 공개키로 바뀌어서 원천적으로 해킹이 불가능합니다.
이 정도입니다. PS3 해킹에 대해서 정펌 유저들은 과도하게 반응할 필요없습니다. 그럼 이만
용산에서 대행해줄 것 같네요
플삼이랑 엑박 해킹 막히면 루리장터 망한다는 전설이.
흥미로운 내용이네요 추천드립니다 ㅎㅎ
소프트웨어를 처분할 시기가 온것 같군..
ㅊㅊㅊ
용산에서 대행해줄 것 같네요
플삼이랑 엑박 해킹 막히면 루리장터 망한다는 전설이.
흥미로운 내용이네요 추천드립니다 ㅎㅎ
정독했는데...먼소린지 이해가 안가네요 ㅠㅠ
공개키 비밀키 개념을 이해하셔야 합니다.
ㅊㅊㅊ
소프트웨어를 처분할 시기가 온것 같군..
감사합니다. 좋은 정보네요 추천