4 min read

TM-AC1900 펌웨어 롤백 문제

T-Mobile AC1900 모델은 ASUS RT-AC68U 모델과 같은 하드웨어이고, 펌웨어만 바꿔서 OEM 납품된 모델이다. 이것을 AC68U로 펌웨어 덮어씌우는 것을 지난번 포스팅에서 이야기했는데…

… 그런데 이게 문제가 생겼다. AC68U 최신 펌웨어 384.20648 을 설치하면 펌웨어가 AC1900 376.3199 로 롤백된다.
그나마 다행히도, 내가 쓰고 있는 물건은 아예 플래시 구조까지 모조리 롤백되어, 복구모드에서 1703 펌웨어를 설치할 수 있었고, 이후 재작업을 통해서 384.20308 버전을 설치해 둔 상태다. 그 이후로 며칠이 지났지만 아직까지는 롤백이 재현되지는 않았다.

dmesg 찍어보면 부팅과정 중 CFE 덮어씌우는 절차가 있는 모양이다. 여기에서 무언가 장난을 치긴 한 모양이고, SNB포럼에서는 mtdblock5 쪽에 T-Mobile 인증서 데이터가 남아있는지 체크하는 것 같다는 추측만 나오고 있다. AC68U는 mtdblock5가 0xFF로 가득차서 완전히 텅 비어 있기 때문.
여기에 더하여, mtdblock3 을 덤프하여 보니 끝부분 16MiB 영역에 T-Mobile 펌웨어의 찌꺼기가 남아있는 것 같다. 이걸 불러와서 어떻게 하는것 같다는 추측을 해 보지만 구체적인건 알 수가 있어야 말이지…

그러한 고로, 펌웨어 작업 준비중이라면 최신 펌웨어는 거르고 작업하시라. 일단은 20308 버전은 안전한 것 같고, 20624 버전까지는 안전하다는 코멘트가 있다. 물론 ASUS 써글넘들이 홈페이지에서 기존 펌웨어를 다 날려버리고, 20648 버전만 제공하고 있기 때문에 펌웨어 파일은 별도 검색을 통해서 구해야 한다.


20180423 추가

AC68U 시리즈에 장착된 플래시메모리는 128MiB이고, 이를 128KiB 단위로 잘라서 MTD 장치로 마운트해서 쓰는 구조이다. 이 때 블록 구성은 CFE 버전에 따라 결정된다.

TM-AC1900에서 사용하는 MTD장치 블록 구성은 다음과 같다.

mtd0 0x0000 0000 - 0x0008 0000 ( 0.5 MiB) : boot -> CFE mtd1 0x0008 0000 - 0x0020 0000 ( 1.5 MiB) : nvram mtd2 0x0020 0000 - 0x0300 0000 ( 46 MiB) : linux mtd3 : rootfs -> / mtd4 0x0300 0000 - 0x0600 0000 ( 48 MiB) : linux2 mtd5 : rootfs2 mtd6 0x0600 0000 - 0x07EC 0000 (30.75MiB) : brcmnand -> /jffs mtd7 0x07EC 0000 - 0x0800 0000 (1.25 MiB) : asus -> /T-Mobile

RT-AC68U에서 사용하는 MTD장치 블록 구성은 다음과 같다. 아마도 376.3626 펌웨어에서 CFE가 업데이트 되면서 구조가 변경된 것 같다. linux 블록과 jffs 블록 크기가 대폭 증가하면서, 이후 버전은 펌웨어 크기도 40MiB 이상 대폭 커지게 된다.

mtd0 0x0000 0000 - 0x0008 0000 ( 0.5 MiB) : boot -> CFE mtd1 0x0008 0000 - 0x0020 0000 ( 1.5 MiB) : nvram mtd2 0x0020 0000 - 0x0400 0000 ( 62 MiB) : linux mtd3 : rootfs -> / mtd4 0x0400 0000 - 0x07EC 0000 (62.75MiB) : brcmnand -> /jffs mtd5 0x07EC 0000 - 0x0800 0000 (1.25 MiB) : asus

여기에서 중요한 것은 asus 블록인데, RT-AC68U에서는 0xFF로 채워져 있는 완전히 비어 있는 파티션이라고 하며, 어디에도 마운트되지 않으므로 사용되지도 않는다. 반면 TM-AC1900에는 T-Mobile 인증서가 보관되며, /T-Mobile 디렉터리에 마운트 되는 것으로 보아 T-Mobile 서비스에서 단말 인증에 쓰이는 모양.
여하튼, 20648 펌웨어 업데이트 이후 일정 시점에 해당 인증서 파일의 존재유무를 체크하고, 인증서가 존재한다면 CFE 2.1.2.7 및 펌웨어 TM-AC1900 376.3199로 롤백하는 모양이다. 악랄하게도, 이 과정에서 시리얼콘솔 잠금, 펌웨어 업데이트 잠금 등의 조치가 취해지는 것 같다.

하여, 해당 인증서 파일을 삭제하는 작업이 추가로 필요하게 되었으며, 인증서를 삭제한 뒤에 롤백된 사례는 아직까지는 없는 모양이다. 따라서 향후 펌웨어 작업할 때에는 asus 블록을 밀어버리는 작업이 필요하겠다.
또한 linux2 블록에도 구형 T-Mobile 펌웨어가 남아있는 것 같으니, 가능하다면 AC68U 376.3626 펌웨어를 덮어씌우기 전에 해당 파티션도 밀어버리자. 플래시에 찌꺼기가 남아있기 때문에 복원 가능하다.

또한 롤백된 경우, 탈출 자체가 막히는 것 같지만, 펌웨어 376.3199가 워낙 구버전이다보니 보안 취약점이 많이 존재한다 -_- 이를 이용해서 376.1703으로 다운그레이드가 가능하다. 자세한 것은 검색해 보자.