2P by GN⁺ | ★ favorite | 댓글 2개
  • 압전식 담배 라이터만으로 노트북 DDR3 메모리 버스에 전자기 결함을 유도해, 비권한 Linux 사용자에서 root 셸까지 얻는 로컬 권한 상승 실험이 성공함
  • Samsung S3520 노트북의 SODIMM 데이터 핀에 15Ω 저항과 안테나 역할의 전선을 납땜하고, 근처에서 라이터를 클릭해 특정 비트가 뒤집히는 메모리 오류를 만들었음
  • CPython 실험에서는 DQ7 라인 결함으로 객체 포인터의 bit 7을 뒤집어 bytes 내부의 가짜 bytearray 구조를 참조하게 만들고, 임의 메모리 읽기/쓰기 프리미티브를 구성함
  • Linux 권한 상승은 페이지 테이블을 물리 메모리에 대량 분사한 뒤, PTE 읽기 중 bit 29 결함을 유도해 사용자 접근 가능한 매핑이 페이지 테이블을 가리키게 하는 방식으로 동작함
  • 성공 후 /usr/bin/su의 첫 페이지를 물리 메모리에서 찾아 작은 setuid root ELF로 교체해 페이지 캐시를 오염시키며, 실험 환경에서 신뢰도는 SSH 접속 시 체감 약 50%, 그래픽 셸에서는 약 20%였음

라이터 기반 EMFI 실험의 출발점

  • 소프트웨어 버그가 없을 때도 결함 주입(fault injection) 으로 예외적 동작을 만들 수 있음
    • 결함 주입 방식에는 소프트웨어 제어 데이터 손상, 전원 글리치, 클록 글리치, 전자기 펄스, 레이저 등이 포함됨
  • 하드웨어 결함 주입은 보통 결함을 넣는 시점과 위치의 정밀도가 필요해 전문 장비와 비용이 필요함
  • 출발점은 압전식 BBQ 점화기를 인덕터에 결합해 저예산 전자기 결함 주입(EMFI) 도구로 쓰는 접근이었음
    • 이전에는 Arduino에서 실행되는 소프트웨어 AES 구현을 DFA로 공격하는 데 성공함
  • Nintendo Switch 2 발표가 가까워졌다는 맥락에서, Switch 1과 유사한 시스템 소프트웨어와 소프트웨어 버그 부족을 예상하고 저비용 EMFI 실험을 다시 진행함

테스트 대상과 DDR 버스 결함

  • 테스트 대상은 Intel i3-2310M CPU와 1GB DDR3 RAM을 탑재한 2011년 제조 Samsung S3520 노트북임
    • 가벼운 데스크톱 Linux 배포판인 Arch를 실행할 수 있고, 손상돼도 부담이 적은 장비로 선택됨
  • 목표는 주입된 하드웨어 결함에 기반해 동작하는 로컬 권한 상승 익스플로잇을 작성하는 것이었음
  • 가장 물리적으로 취약한 지점으로 DRAM 메모리와 시스템을 연결하는 DDR 버스가 선택됨
    • SODIMM에는 읽기/쓰기 데이터 비트를 전달하는 64개 DQ 핀, DQ0~DQ63이 있음
  • 실험 장치는 DQ26으로 추정되는 핀에 15Ω 저항과 전선 하나를 납땜한 구조임
    • 전선은 안테나처럼 주변 전자기 간섭을 받아 데이터 버스에 전달함
    • 저항은 정상 메모리 동작을 계속 방해하지 않도록 간섭 강도를 제한하기 위한 요소이며, 실제로 필요 없을 수도 있음
  • 일반 압전식 라이터를 안테나 전선 근처에서 클릭하는 것만으로 memtest에서 메모리 오류가 안정적으로 나타남
    • 표시된 오류는 모두 bit 29가 뒤집힌 형태였음
    • 납땜한 핀은 DQ26으로 추정됐지만 bit 29가 뒤집힌 이유는 핀을 잘못 세었거나 메인보드가 데이터 라인을 바꿔 배선했을 가능성이 있음
  • 손가락 반응 속도 수준이라 결함 주입 타이밍 제어는 정밀하지 않음
    • 결함이 발생하면 특정 64비트 읽기 또는 쓰기에서 같은 비트가 뒤집힐 가능성이 높음

CPython에서 비트 플립 악용

  • 첫 실험은 CPython에서 샌드박스 탈출 형태의 익스플로잇을 만드는 것이었음
    • CPython 자체가 샌드박스가 아니므로 실제 보안 경계 우회는 아니며, 익숙한 내부 구조를 활용한 준비 단계임
  • 이 실험에서는 앞서 사진의 DQ26 대신 DQ7에 납땜한 전선을 사용함
  • CPython 객체는 가비지 컬렉션 힙에 있고, 객체 헤더에는 refcount와 타입 객체 포인터가 있으며 이후 타입별 필드가 이어짐
    • bytes 객체는 길이 필드 뒤에 데이터 자체가 같은 힙 할당 안에 있음
    • bytearray 객체는 길이 필드 뒤에 실제 데이터 저장 버퍼를 가리키는 포인터가 있음
  • 핵심 전략은 bytes 객체 내부에 가짜 bytearray 구조를 데이터로 넣는 것임
    • CPython이 이 가짜 객체에 대한 참조를 주도록 속이면, 공격자가 선택한 bytearray의 길이와 포인터 필드로 임의 메모리 읽기/쓰기가 가능해짐
  • bit 7을 뒤집는 결함은 64비트 워드에서 포인터에 128을 더하거나 빼는 효과를 냄
    • 가짜 bytearraybytes 객체 내부 +128바이트 오프셋에 배치하면, bytes 객체 포인터가 결함으로 가짜 bytearray 포인터가 될 수 있음
    • 이 변환은 50% 확률로 원하는 방향이 됨
  • 메모리 내용 자체가 아니라 메모리 버스의 읽기/쓰기 작업을 글리치한다는 점이 중요함
    • Rowhammer처럼 저장된 데이터가 바뀌는 방식이 아니라, 버스에서 진행 중인 접근이 손상됨
  • 원하는 포인터 접근이 버스 활동의 대부분을 차지하도록 같은 객체 참조를 큰 튜플에 채움
    • CPU 캐시가 DRAM 접근을 줄이므로, 3MiB 캐시보다 큰 구조를 순차 접근해 매번 DRAM에서 읽도록 만듦
    • Python의 is는 포인터 비교처럼 동작해 포인터가 바뀌었는지 확인하는 데 사용됨
  • 전체 CPython 익스플로잇 소스는 ddr3_dq7.py에 있음
    • TESTING 변수로 하드웨어 없이 소프트웨어에서 비트 플립을 시뮬레이션할 수 있음

Linux 권한 상승에 필요한 메모리 구조

  • Linux 로컬 권한 상승에서는 캐시, 가상 메모리와 페이지 테이블, TLB가 핵심 구조로 사용됨
  • DRAM은 상대적으로 느리기 때문에 CPU는 L1, L2, L3 캐시를 사용함
    • 실험 노트북의 L3 캐시는 3MiB임
    • 캐시 적중 시 DRAM에 접근하지 않고, 캐시 미스가 나야 DRAM 읽기가 발생함
  • 캐시 관점의 최소 단위는 캐시 라인이며, 이 노트북에서는 64바이트임
    • 한 바이트를 읽어도 캐시되지 않은 데이터라면 64바이트 DRAM 읽기가 발생함
    • DDR 데이터 버스는 64비트 폭이므로 이 읽기는 8번의 순차 접근 burst로 처리됨
  • x86-64의 가상 메모리는 4KiB 페이지와 트리 형태의 페이지 테이블로 구현됨
    • 이 플랫폼에는 4계층 페이지 테이블이 있음
    • 각 페이지 테이블은 4KiB 페이지이며, 512개의 64비트 PTE를 담음
    • 상위 계층 PTE는 다음 계층 페이지 테이블의 물리 주소를 가리키고, level 0 PTE는 대상 물리 페이지를 가리킴
    • 루트 페이지 테이블의 물리 주소는 CR3 CPU 레지스터에 저장됨
  • PTE에서 필요한 부분은 물리 주소 필드임
    • 플래그 비트를 마스킹하면 페이지 정렬된 물리 메모리 주소가 남음
  • TLB는 가상 주소에서 물리 주소로의 페이지 매핑을 캐시하는 CPU 내부 하드웨어임
    • 실험 노트북의 정확한 TLB 크기는 알 수 없지만 약 1024 엔트리 수준으로 보임

페이지 테이블을 사용자 메모리로 끌어오기

  • Linux 익스플로잇 전략은 Mark Seaborn의 Rowhammer exploit 요소에서 영감을 받음
  • 목표는 자기 프로세스의 페이지 테이블을 사용자 접근 가능한 메모리로 매핑하는 것임
    • 그렇게 되면 PTE를 수정해 임의 물리 메모리에 접근할 수 있음
  • 물리 메모리 배치를 정밀하게 제어하기보다는, 물리 메모리의 정확히 50% 를 level-0 페이지 테이블로 채움
  • 이후 R/W 매핑들을 반복 접근해 TLB를 우회함
    • 매핑 수가 TLB 크기를 넘기 때문에 각 접근에서 페이지 테이블 순회를 강제할 수 있음
    • 그 순회 중 level-0 PTE 읽기에서 bit 29 결함을 일으키는 것이 목표임
  • bit 29가 뒤집히면 PTE가 가리키는 물리 주소가 512MiB 오프셋만큼 바뀜
    • 운이 좋으면 바뀐 주소가 앞서 분사한 level-0 페이지 테이블 중 하나를 가리킴
    • 이 경우 원래 일반 R/W 페이지로 보여야 할 매핑이 페이지 테이블을 일반 R/W 페이지처럼 노출함
  • 이론상 bit 29부터 bit 12까지의 어떤 비트 플립도 작동할 수 있음
    • bit 12는 4KiB 오프셋에 해당함
    • 핵심은 PTE가 “다른 곳”을 가리키고, 물리 메모리의 약 50%가 악용 가능한 페이지 테이블로 채워져 있다는 점임
  • 안테나 전선 납땜은 반드시 필요하지 않을 수도 있음
    • 충분히 강한 전자기 간섭을 만들 수 있다면 가능성이 있지만, 시스템 크래시나 손상 가능성은 훨씬 높아짐

level-0 페이지 테이블 분사 방식

  • 먼저 Linux의 memfd_create로 메모리 기반 파일을 만듦
    • Mark Seaborn 익스플로잇의 /dev/shm/ 파일과 같은 역할을 하지만 파일시스템을 직접 건드리지 않음
  • 같은 버퍼를 mmap으로 여러 번 매핑함
    • MAP_FIXED 옵션으로 각 매핑을 가상 메모리에서 2MiB 정렬되게 강제함
    • 이 정렬은 매번 새 level-0 페이지 테이블 생성을 보장함
  • Linux는 프로세스당 매핑 수, 즉 VMA에 약 2^16 제한이 있음
    • 각 매핑을 32MiB 길이로 만들어 매핑 하나가 16개의 level-0 페이지 테이블을 생성하게 함
  • 각 매핑은 가상 주소 공간에서는 32MiB를 차지하지만, PTE들은 같은 물리 페이지를 가리킴
    • 물리 메모리 비용은 level-0 페이지 테이블뿐임
    • 이 방식으로 메모리가 찰 때까지 페이지 테이블을 분사할 수 있음

물리 메모리 읽기/쓰기와 su 페이지 캐시 오염

  • 결함을 기다리며 R/W 매핑을 반복 접근하다가 예상과 다른 값이 반환되면 결함을 감지함
    • 반환 데이터가 PTE처럼 보이면 페이지 테이블에 대한 R/W 접근을 얻은 상태임
  • 다음 단계는 이 페이지 테이블이 어떤 가상 주소에 해당하는지 찾는 것임
    • PTE를 물리 주소 0을 가리키도록 수정함
    • 다시 R/W 매핑을 스캔해 어떤 매핑이 바뀌었는지 찾음
  • PTE를 수정해도 MMU는 즉시 알아차리지 않음
    • 가상-물리 매핑이 TLB에 캐시되어 있기 때문임
    • 사용자 공간에서 직접 TLB를 flush하는 방법을 알 수 없어, 수천 개 R/W 매핑을 반복 접근해 TLB를 새 값으로 채우고 기존 값을 밀어냄
  • 이 시점에서 전체 물리 메모리에 대한 읽기/쓰기 접근이 가능해짐
  • 이후 /usr/bin/su 실행 파일을 읽기 전용으로 열고 첫 페이지를 mmap함
    • /usr/bin/susetuid root 실행 파일임
    • 물리 메모리 전체를 스캔해 같은 페이지를 찾음
    • 찾은 물리 페이지에 쓰기 접근해, root 셸을 띄우는 4KiB 미만 ELF payload로 교체함
  • Linux는 다음에 su가 실행될 때 첫 페이지가 이미 메모리에 있다고 보고 디스크에서 다시 읽지 않음
    • 오염된 페이지 캐시를 재사용해 주입된 ELF를 실행함
    • 주입된 ELF는 echo 1 > /proc/sys/vm/drop_caches로 페이지 캐시를 비워, 그 다음 su 실행은 정상 동작하게 함
  • 전체 Linux 익스플로잇 소스는 linux_x86_64_lpe.c에 있음

신뢰도와 환경 제약

  • 데모 실행에서는 운이 좋아 한 번의 라이터 클릭으로 좋은 글리치가 발생함
    • 이전 여러 시도에서는 전체 시스템이 크래시됨
  • 전체 익스플로잇 신뢰도는 엄밀히 측정되지 않음
    • 노트북 화면을 끄고 SSH로 접속한 상태에서는 체감 약 50%로 보임
    • 그래픽 셸에서는 약 20%에 가까움
  • 실험 시스템은 통합 그래픽을 사용함
    • GPU의 메모리 접근이 익스플로잇을 방해할 가능성이 있음
  • pipewire, sshd, systemd 관련 백그라운드 서비스와 swap도 켜져 있었음
    • 현실적인 데스크톱 Linux 환경을 유지하려는 선택이었고, 비활성화하면 신뢰도가 올라갈 수 있음
  • RAM이 더 많이 설치돼 있었다면 더 높은 비율을 페이지 테이블로 채울 수 있어 전체 신뢰도가 증가할 수 있음

가능한 활용과 남은 질문

  • Windows에서 신뢰도 높은 EMFI 로컬 권한 상승이 가능하다면, TPM 기반 안티치트가 시스템에서 허용되는 소프트웨어를 제한하는 상황에 영향을 줄 수 있음
  • Android의 SafetyNet 또는 Play Integrity 검사에도 유사한 이야기가 가능하지만, 휴대폰에 글리치 모드칩을 넣는 것은 더 어려움
  • 저수준 성능 최적화에서는 페이지 테이블과 TLB 지식이 직접 중요하지 않은 경우가 많지만, 이 익스플로잇에서는 가상 메모리 환상을 유지하는 구조가 직접 공격 대상이 됨
  • 적용 범위에는 아직 확인할 부분이 많음
    • DDR4, DDR5에서도 동작하는지
    • ARM에서도 동작하는지
    • ECC의 여러 유형, 특히 DDR5 Link-ECC가 어느 정도 완화하는지
    • RP2040 같은 장치로 유사 결함을 전자적으로 트리거하는 가장 단순한 방법은 무엇인지
    • 하이퍼바이저 탈출에 사용할 수 있는지
    • WebKit 익스플로잇 또는 Nintendo Switch 커널 익스플로잇으로 만들 수 있는지

댓글과 토론

라이터에서 점화기 빼서 오락실 코인 올리는거 생각나네요

Hacker News 의견들
  • 여기서의 영감은 Switch 2에서 루트 권한을 얻는 것이었고, Linux에서 루트를 얻은 건 개념 증명이었음
    목표는 실용적으로 악용 가능한 근본 보안 취약점을 보여주는 게 아니라, TPM이나 게임의 커널 권한 안티치트를 깨지 않고도 자기 하드웨어의 실제 소유권을 되찾는 쪽에 가까움

    • 취지는 이해하지만 요지는 잘 모르겠음. 20년 전처럼 콘솔이 손해나 낮은 마진으로 팔리는 강력한 컴퓨터였을 때는 더 말이 됐지만, 지금 Nintendo는 콘솔을 이익 내고 팔고 Switch 2도 그럴 가능성이 큼
      인상적이고 소프트웨어 자유를 지키려는 작업은 반갑지만, 차라리 대안을 지지하고 싶음. 왜 그들에게 설치 기반처럼 보이는 숫자와 이익을 주나? 처음부터 루트 접근이 기능으로 제공되는 Steam Deck이나 다른 휴대용 기기를 사면 됨
  • 글은 아주 잘 쓰였고 도전도 대단하지만, 내 머리는 “물리 접근이 있으면 이미 끝”이라는 해킹 상식 쪽으로 반응함
    처음 떠오른 건 물리 접근이 있으면 BIOS를 다시 플래시하고, 드라이버 백도어를 설치하고, 라이브 OS로 부팅해서 /etc/{passwd,shadow,groups, etc}를 조작하면 된다는 식이었음.
    하지만 디스크가 암호화돼 있으면 대부분의 물리 접근 공격이 불가능하다는 걸 떠올렸고, 그러면 이런 공격이 엄청나게 매력적으로 보임. 안테나 아이디어는 간섭 장치를 내장한 하드웨어로 확장할 수 있고, 무선 매체로 외부와 통신하게 만들어 공격자가 원격으로 간섭을 일으킬 수도 있음. 여기에 피해자가 방문하도록 속인 공격자 제어 웹사이트까지 있으면 현실성이 생김

    • 서론의 동기는 휴대용 게임 콘솔을 루팅/탈옥하는 것임. 물리 접근은 있지만 여전히 “허가되지 않은” 접근을 얻고 싶은 상황으로 충분히 그럴듯함
    • 내가 보기엔 BIOS를 다시 플래시해도 별 소득이 없음. 실행이 시작되기 전에 CPU 하드웨어가 올바른 개인키 서명을 검사하므로 먼저 서명해야 하기 때문임
      전자기 간섭 기법은 CPU 자체를 속이는 방식이라, 새로운 페이징 알고리즘이 나오지 않는 한 어떻게 고칠 수 있을지 잘 모르겠음
    • “디스크가 암호화돼 있으면 대부분의 물리 접근 해킹이 불가능하다”는 건 PC가 꺼져 있어서 아직 키파일이나 암호구로 데이터를 복호화해 시스템에 부팅하지 않은 경우에만 맞음
      내 PC도 전체 디스크 암호화를 쓰지만, 부팅하면 복호화에 쓰는 키파일이 사용되고, 그 순간부터는 물리적으로 접근 가능한 PC가 됨
  • 마음에 듦. 요지는 메모리 읽기나 쓰기 중 정전기성 비트 뒤집기가 일어나고, 납땜까지 하면 “안전한” 포인터를 내가 원하는 악성 포인터로 결정적으로 바꿀 수 있다는 것임
    역사적으로 물리 접근에 대한 관점은 “상대가 기기를 손에 넣으면 게임 끝”이었음. TPM과 신뢰 실행 환경은 이 관점을 “사용자가 물리 접근을 갖고 있어도 엔클레이브 내부의 특정 연산은 신뢰할 수 있다”로 바꿔놓았음.
    다음 단계가 가장 흥미로움. 납땜 없이도 어느 정도 신뢰성 있는 결과를 얻을 수 있을까? 전기적 간섭을 다루는 데 이미 많은 고민이 들어가 있으니 훨씬 어려울 것 같지만, 가능할 수도 있음. 라이터를 누를 때마다 64비트 읽기에서 무작위 1비트가 뒤집히고, 익스플로잇이 예컨대 4개 비트 뒤집기 중 하나만으로도 동작한다면 평균 시도 횟수는 그리 많지 않을 수 있음

    • 물리 접근이 있어서 안테나를 납땜할 수 있다면, “뒤쪽”에서 프로그래밍 가능한 맞춤형 DIMM을 꽂아 TPM이든 뭐든 뚫을 수 있음
      메모리의 어느 부분이든 원하는 시점에 원하는 값으로 바꾸면 되므로, 무작위 비트 뒤집기에 기대할 필요가 없음. 그냥 프로그램 전체를 주입하면 됨
    • 안테나가 없으면 뒤집히는 걸 단일 비트로 제한하기 어려울 것 같음. 적어도 내 추측은 그럼
  • 제목만 보고 누군가 담배 라이터에 루트 권한을 얻었다는 글인 줄 알았고, 충분히 믿을 준비가 되어 있었음
    부모님 오븐도 정기적으로 소프트웨어 업데이트를 받으니, 라이터가 “스마트”한지 의심조차 안 했음

    • 제목만 봤을 때는 고무호스 암호분석의 방화 버전을 반쯤 기대했음
    • 작은 태양광 패널과 배터리가 달린 라이터가 있고, 라이다가 가까운 담배나 시가를 감지하면 작은 테이저처럼 불꽃을 내는 식이면 어떨까 싶음. 손가락이나 핫도그에는 반응하지 않고, 버튼도 없고, 라이터 기름도 영원히 보충할 필요 없음
      당연히 라이다를 돌리고, 동시에 강렬한 LED 플래시와 페이드, 햅틱 충격, 효과음을 내기 위한 칩도 필요함. 누가 데모로 만들어줬으면 좋겠음. 작은 리볼버처럼 생기면 좋겠지만, 손가락과 핫도그 안전을 위해 가상 메모리 컨트롤러를 강화해야 할 듯함
    • 내가 가장 자주 쓰는 납땜 인두도 수정 가능한 펌웨어가 RISC-V SoC에서 돌고 있음. (https://pine64.com/product/pinecil-smart-mini-portable-solde...)
      납을 녹이는 일이 이렇게 복잡할 수 있다니. 그래서 라이터를 루팅했다는 글도 충분히 믿을 수 있음
    • 화염의 모양으로 제곱근을 계산하는 줄 알았음
  • 80~90년대 시드니 오락실 기계에 하던 익스플로잇이 떠오름. 학교 가스난로에는 우리가 “클리커”라고 부르던 압전 점화기가 있었고, 난로에서 떼어낼 수 있었음
    그 클리커를 동네 오락실에 가져가 CRT 모서리 중 하나에 딸깍 누르면 시스템에 충격이 들어가 게임 크레딧이 올라갔음. 아마 CRT 접지가 물리적으로 동전을 확인하는 장치와 같은 접지선을 공유했기 때문이라고 봄.
    시간이 지나자 업주들이 알아채고 경보 같은 걸 추가했지만, 그 전까지는 정말 최고의 시절이었음

    • 80년대 초에 똑같이 했는데, 우리는 일회용 라이터 안의 클리커를 썼음
      몇 년 동안 하다가 업주들이 알아채고 오락기 캐비닛을 투명 플라스틱으로 덮기 시작했음. 동시에 캐비닛이 플라스틱으로 밀폐되자 통풍을 위해 뒤쪽에 구멍을 뚫었는데, 대나무 막대로 동전 투입을 등록하는 레버를 누를 수 있다는 걸 발견함.
      그러자 통풍구를 뒤가 아니라 위로 옮겨 레버에 닿지 못하게 했지만, 이번에는 반환구로 동전을 밀어 올리면 동전 등록 레버를 건드릴 수 있다는 걸 알게 되어 무료 게임이 계속됨. 결국 반환구 상자 안에 날카로운 나사를 박아 손가락을 베이게 만들었고, 그 뒤로 우리는 SEGA를 샀음. 정말 재미있었음
    • 친구가 오락기 뒤로 들어가 전원을 껐다 켜면 무료 토큰이 하나 생기는 기계가 떠오름
      직원이 무료로 테스트할 수 있게 일부러 그렇게 설계된 건지는 모르겠지만, 친구는 뒤로 기어 들어가 공짜로 계속 플레이했음
    • 미국에서도 통했음. 1990년대쯤에는 대부분 오락실이 현금 동전 대신 독자 토큰을 썼고, 토큰이 줄지어 미끄러지듯 쌓인 기술형 도박 기계도 많았음
      “Jungle Jive” 버전은 담배 라이터의 전기 점화기로 금속 투입구에 약한 충격을 주면 기계 반대편에서 토큰이 나왔음. 너무 빠르게 많이 딸깍거리면 경고 모드로 들어갔음. 혼자서도 가능했지만 최적 구성은 직원 감시 1명, 클릭 담당 1명, 수거 담당 1명인 3인조였음
    • 핀볼 기계 옆면을 정확히 때리면 무료 게임이 생기던 흐릿한 기억이 떠오름. 아마 같은 원리였을 것 같음
    • 해커 Pengo가 같은 방식으로 오락기 크레딧을 추가한 것으로 알려졌다는 내용을 이 책에서 읽은 기억이 있음
      https://www.amazon.com/CYBERPUNK-Outlaws-Hackers-Computer-Fr...
  • 호주인으로 읽으면 다르게 해석됨. 협상 실력에 따라서는 담배 라이터 하나만으로도 root를 얻을 수 있음

  • 재미있는 익스플로잇일 뿐 아니라, CPU에서 캐시가 동작하는 방식을 설명하는 멋진 미니 입문서이기도 함
    1년쯤 전에 컴퓨터가 어떻게 동작하고 만들어지는지, 가장 작은 부분인 논리 게이트부터 시작해 설명하던 글이 올라왔던 기억이 있음. 그 웹사이트가 뭐였는지 기억나는 사람?

  • “15옴 저항 하나와 선 하나를 DQ26에 납땜한 것뿐이다. 선은 안테나처럼 동작해 근처 전자기 간섭을 받아 데이터 버스에 바로 흘려보낸다”
    정말 멋진 해킹임. 라이터로 전자기 간섭을 만드는 방식이라니. DDR 버스 옆에서 불을 붙여보고 무슨 일이 나는지 봐야겠음

  • 물론 먼저 메모리에 안테나를 납땜해야 한다면 가능함 :-)
    그래도 이런 글리치를 실제로 악용하는 방법에 대한 훌륭하고 꼼꼼한 글임. 담배 라이터는 데이터센터 뒷문에서 어슬렁거리며 관리자가 담배 피우러 나오길 기다리는 데도 쓸 수 있음

    • “이론상 29번 비트부터 12번 비트 사이 어느 위치에서든 비트 뒤집기가 일어나면 동작한다. 따라서 충분히 강한 전자기 간섭을 만들 수 있다면 안테나 선을 납땜하는 것이 완전히 필수는 아닐 수도 있다”
    • “실용적 사용” 섹션의 한 가지 용도는 콘솔의 복사 방지 우회
  • 제목을 봤을 때는 USB-C 담배 라이터 장치로 현대 자동차를 해킹하는 이야기일 줄 알았음