CTR_EL0 가로채기가 ARM64 폰을 멈춘 원인, 실행 코드 정렬과 메모리 속성 추적

CTR_EL0 가로채기가 ARM64 폰을 멈춘 원인, 실행 코드 정렬과 메모리 속성 추적

  • postmarketOS용 ARM64 베어메탈 하이퍼바이저CTR_EL0 읽기 가로채기를 켜면 휴대폰이 무작위로 멈추고, 몇 초 뒤 watchdog이 시스템을 재시작했음
  • 가로챈 MRS 명령의 레지스터 보존과 예외 처리 트램펄린은 QEMU 단일 단계 실행에서 정상으로 확인됐지만, 실제 기기에서는 핸들러가 의도한 출력 레지스터조차 바꾸지 않는 것처럼 보였음
  • 원인은 실행 가능한 msr_accessors 배열을 런타임에 정렬한 코드였음. ARM은 I-cache와 D-cache가 자동으로 일관성을 유지하지 않으므로, 데이터 변경 뒤 그 버퍼의 기계어를 실행하면 이전 명령을 가져오거나 변경분이 RAM에 반영되지 않을 수 있음
  • 작성자는 배열 정렬을 빌드 단계로 옮겨 핸들러 동작을 고쳤지만 부팅 실패는 계속됐음. 모든 예외 벡터에 로그를 넣어도 예외가 잡히지 않았고, /proc/last_kmsg에는 e2fsck의 /dev/urandom 읽기 직후 로그만 남았음
  • Hacker News 토론에서는 ARM 명세가 Device 메모리의 추측적 명령어 페치를, 모든 예외 수준에서 execute-never로 표시하지 않은 경우 막지 않는다는 ARM DDI 0487K.a 문구를 인용했음

Hacker News opinions

NX 비트는 이해하는데, 이 글에서 NX추측 실행 접근이 어떻게 이어지는지 모르겠음. 흥미로운 주제가 여럿 섞였는데 따라갈 배경지식이 부족하네.

CPU는 성능 때문에 코드를 추측 실행했다가 예측이 틀리면 결과를 되돌림. 이 ARM 구현처럼 그 과정이 잘못되면 실행하라고 하지 않은 주소를 실행하려다 멈출 수 있고, Spectre나 Meltdown도 비슷한 부류의 문제임.

내 이해로는 NX가 추측적 명령어 페치를 막아서 Spectre 계열 취약점에 관여한 CPU 동작도 제한함. 원래 NX의 목적과는 좀 다른 효과라 놀라움.

내가 보기엔 NX와 W^X는 별로임. JIT는 필요한 때 코드를 쓰는 방식이 자연스럽고, 캐시 라인 플러시는 너무 불편한 우회책이라 자기 수정 코드를 일급으로 다뤄야 함.

그건 진짜 핫테이크네.

자기 수정 코드는 RAM이 너무 느려서 현대 CPU에선 성능이 안 나옴. 큰 코드 작업집합을 돌리는 브라우저나 UI는 I-cache에서 빠르게 가져오고 디코드하는 게 중요하고, 모든 명령어 페치가 저장과 충돌하는지 검사하면 비용이 너무 큼. Apple도 명시적 무효화로 JIT를 충분히 굴리고 있고.

use-after-free가 함수 포인터를 덮으면 NX는 그 포인터 호출 시점에 바로 트랩을 내서 실패 지점 근처에서 죽게 해줌. 오래된 바이트를 코드로 실행하면 크래시와 스택 트레이스가 훨씬 엉망일 수 있음.

ARM 설계가 이상하게 느껴짐. Device 메모리에서 데이터 프리페치는 막으면서 명령어 프리페치는 허용할 이유가 있나, 둘 다 막아야 하는 것 아닌가.

내 추측으로는 프런트엔드 하드웨어에 어떤 메모리 속성을 전달할지 줄이려는 설계 같음. Device 속성을 데이터 프리페처 쪽에만 보내고, 프런트엔드에는 NX만 보내면 배선과 파이프라인 부담이 줄어들 테니까.

여기서 명령어 프리페치는 사실상 프리페치가 아니라 추측 실행임. 분기 예측이 틀릴지 fetcher는 디코드 전까지 모르니 현대 코어는 거의 항상 추측적으로 가져오고, Cortex-A53처럼 겉보기엔 인오더인 코어도 분기 예측기를 씀.

더 이상한 건 Device 영역에서 의도적으로 코드를 실행하는 행위는 UNPREDICTABLE이라는 점임. 안정적으로 실행하면 안 되는 곳에서 추측적 명령어 페치는 할 수 있다는 얘기라 이상함.

ARM 공급사가 마음대로 구현을 바꿀 수 있다는 표현은 과장임. 자체 코어를 설계할 수 있는지는 라이선스마다 다르고 Meta 같은 큰 회사도 모두 가능한 게 아님. NVIDIA가 합법적인 동작에 새 트랩을 넣으면 Apple용 바이너리가 Grace에서 깨질 수 있으니 ARM도 사용자 공간 호환성을 강하게 요구함.

글이 인용한 Linux 커널에는 Apple CPU가 하이퍼바이저 모드에서 AArch64 명세와 달라지는 경우를 위한 우회 코드가 있음. 글에서 말한 공급사는 명세를 조금 덜 신경 써도 되는 일부 회사를 뜻한 것으로 봄.

Device 메모리로의 추측적 명령어 페치가 기기를 죽이는 버그는 내가 본 버그 중에서도 손꼽힘. Cortex-M4에서 MPU 없이 겪었고, 메모리 속성을 못 바꿔서 컴파일된 코드 배치를 억지로 바꿔 페치를 막는 수밖에 없었음. ARM DDI 0487K.a B2.15.2도 모든 예외 수준에서 execute-never로 표시하지 않으면 Device 속성만으로는 추측적 명령어 페치를 막지 않는다고 적고 있음.

요즘 주소 0에 뭘 매핑하는 건 나쁜 관례로 봄. 1:1 identity mapping을 쓰는 경우도 물리 주소 0에 아무것도 없게 만들어서 굳이 매핑할 필요를 없애더라.

해커뉴스
의회도서관이 공개한 존 마골리스의 40년 미국 길가 건축 사진GLM 5.3 Flash 공개 뒤, 1년 안에 취약점 수정을 배포해야 한다는 경고시와 그림을 조각으로 맞추는 웹 퍼즐 'Jigsaw Haiku', 글자 테두리와 드래그 성능 피드백Emacs Bedrock 2.0, Emacs 31 전용 전환과 내장 기능 중심 기본 설정 갱신220만 종과 11개 분류 체계를 형질 오버레이로 탐색하는 Interactive Tree of LifeStuxnet 바이너리를 바탕으로 재구성한 GPLv3 소스 공개, HN에서는 정확성과 단일 파일 구조를 검증 중브로드컴, VMware VDDK 공개 다운로드 삭제로 가상머신 이전 도구 접근 차단D2 아키텍처 다이어그램용 자동 배치 알고리즘 TALA, MPL-2.0으로 공개1999년 Netscape가 신뢰한 E-Certify 512비트 RSA 루트 2개를 데스크톱에서 인수분해Jellyfin 12.0 출시, DB 마이그레이션과 전체 재스캔 전 백업 필수Dataflow 논문 저자들: 스트리밍 분석의 종착점은 트리거가 아니라 SQL 물질화 뷰와 신선도 계약루비듐 원자파의 자유낙하 위상이 아인슈타인 등가원리 예측과 일치NEC V20 마이크로코드 해독과 인텔 소송 기록NixOS 부트스트랩 시드의 GNU strip 하나로 최종 설치 이미지 거의 모든 바이너리를 감염시키는 Trusting Trust 공격보이저·갈릴레오·카시니가 바꾼 외태양계, 지하 바다를 지닌 얼음 천체 6곳Ladybird, 트위치 재생·DevTools JS 디버깅·세션 복원 추가하고 CSS 파싱과 페인팅을 Rust로 이전LA 현존 건물 110만 채를 건축 연도별로 재생하는 3D 지도작은 유닉스 파이프라인도 결합돼 있으면 단순하지 않다는 주장구글 딥마인드, 실시간 위성·관측소 입력으로 매시간 예보하는 WeatherNext 3 공개게이머스 넥서스, LG 스마트 TV 2억1600만대의 ACR 추적 기능 조사bzip3 벤치마크, zstd 창 크기·메모리 조건을 둘러싼 해커뉴스 논쟁칼텍, AI 크레딧 200만 달러 이상 걸고 40시간 연구수학 해커톤 개최벨기에 대중교통 지도, 실제 위치와 시간표 기반 추정 위치를 구분 표시비산 최소 설계는 Cornucopia, 실용 추천은 Nautilus인 소변기 연구창업가 저자 "AI가 인간보다 수백 배 빨라도 프로그래머는 손으로 코드를 쓸 것"EU 수리성 규정 1년, 스마트폰 2,334종 중 수리 정보 링크 등록은 18%네이선 필더, 복역 35일 전 엘리자베스 홈스를 174분 다큐로 촬영2주간의 느린 휴가에서 책 4권과 미적분을 택한 개발자의 디브레인롯 기록Gamers Nexus: LG TV, 대기 화면에서도 마이크 음성 저장하고 로컬 기기 스캔Cronodump가 읽지 못한 CronosPro DB를 스키마 복구와 파서 수정으로 CSV 변환TiVo, 무료 SkipMode를 11월 종료하고 광고 자동 건너뛰기 유료화 시험로스앨러모스 연구소 잉여 장비를 팔던 Black Hole, 2017년 폐업로봇 시각 디버깅을 LLM에 맡겼더니, 결국 사람이 스크린샷으로 오류를 지적하게 됨CTR_EL0 가로채기가 ARM64 폰을 멈춘 원인, 실행 코드 정렬과 메모리 속성 추적스위스 연방정부, 3,000대에서 Microsoft 365 대체 오픈소스 업무환경 병행 시험Ask HN: AI 에이전트 스킬 파일, 범용 프롬프트보다 조직별 지식과 반복 작업에 집중AI가 PianoDisc 자주연주 피아노 음원에서 MIDI와 더미 음표를 분석하자, 디코더 공개 가능성을 묻는 HN 글인터넷 아카이브, 9월 월 $25 이상 정기 기부 첫 회차 2:1 매칭으로 3배 지원짝 데이터 없이 임베딩 공간을 옮긴다는 논문, 벡터 DB 정보 유출 가능성 제기Vidact, React 함수 컴포넌트를 빌드 때 직접 DOM 갱신 코드로 컴파일Show HN: Proxy 상태 튜플로 기존 DOM을 반응형으로 묶는 약 80줄 라이브러리 MadorLiquid Federation 지갑서 약 4,000 BTC 인출, 브리지 노드 중단으로 사이드체인 일시 정지NetBSD가 NASA 위성 TCP, KAME IPv6/IPsec 등 연구에 쓰인 사례를 모은 페이지예일대 바빌로니아 컬렉션, 기원전 1750년경 양고기·비트 스튜 재현 조리법 공개1024바이트 C로 만든 Python풍 인터프리터, 소스를 다시 파싱해 루프와 함수를 실행Anubis, 1년 작업 끝에 WebAssembly 기반 PoW 솔버 배포GrapheneOS, Compose 메시지 앱과 Secure Paste 공개하며 자체 RCS와 AOSP 앱 교체 계획 발표아사히 리눅스, M3 맥 공식 지원 시작. GPU 가속·잠자기·HDMI는 아직 미지원Minecraft 재현 같은 '데모 벤치마크'는 출시 전 최적화돼 모델 능력을 재지 못한다는 주장iOS 오픈소스 습관 추적기 Kadō, 이분법 대신 점수로 습관 기록Kepter, 폴더 위치를 없앤 시각적 파일 스트림으로 Finder 탐색 문제를 겨냥OpenAI, 연구자용 자동화 AI 인턴 달성 주장하고 2028년 3월 AI 연구자 목표 공개NetBSD 9.5가 9계열 최종판으로 출시, NetBSD-9 지원 종료X의 중단 요구 뒤 Nitter 프로젝트 지속 결정, 법률 자문 후 저장소 복구OpenAI 수석과학자, 재귀적 자기개선 가능성 경고하며 감속과 공동 안전 기준 촉구Asahi Linux, M3 Mac 공식 지원 시작. 3D GPU 성능, 절전, HDMI는 아직 미지원법률 자문 뒤 Nitter 지속 선언, X 대체 프런트엔드 운영 논쟁 재점화A/I, 테러 조직 지정 뒤 25년 만에 메일·웹 호스팅 등 전 서비스 종료 선언IBM Nighthawk r2, 독립 능동 리셋으로 초당 10만 회로 실행에드 웨스트, 제임스 매리엇의 『The New Dark Ages』로 스마트폰 시대 문해력 저하를 논함해커뉴스 링크를 따라간 개발자의 12주 원격 리커스 센터 체험기M-DISC, 최대 1,000년 보존을 내세운 광디스크와 사라지는 블루레이 드라이브 문제브라이언 캔트릴, 링크드인 LLM 대필은 문체보다 작성자 신뢰를 잃게 만든다고 비판35W Ryzen 4750GE로 꾸린 FreeBSD 미니 ITX 데스크톱, GPU 커버와 브래킷을 잘라 SG13에 장착28년간 LGPL·MIT를 쓴 개발자가 SaaS 허점을 이유로 EUPL 1.2를 기본 라이선스로 변경색 보정 기준 ColorChecker 50주년, 24패치의 분광 반사율 표준은 유지이사르 에어로스페이스, 두 번째 스펙트럼 비행으로 궤도 진입·위성 분리 성공11인치 SMD 디스크와 Sun-4/260으로 되짚는 OpenBSD 초기 드라이버 환경코드와 물리로 주파수, 화음, 12음계를 풀어내는 음악 이론 입문Git 저장소를 AI 코딩 에이전트의 지속 메모리로 쓰는 OKF Agent Memory v0.1Go 1.24 내장 map, 버킷 구현을 Swiss Tables 기반으로 교체국경 인접 관계만 남겨 손으로 재배치한 2020년 세계 위상 지도마이클 테터, 풍선과 헛간을 통과하는 레트로 복엽기 브라우저 게임 'Fly By' 공개GPT-6 Astra, 같은 로봇 팔 실험에서 블록 담기 20회 중 19회 성공했지만 퍼즐 삽입은 2회에 그침브라이언 캔트릴, LLM 문체는 독자가 즉시 이탈하게 하며 Pangram 4가 탐지 정확도를 높였다고 주장Chrome 152에서 '창 닫을 때 사이트 데이터 삭제'를 켜도 google.com 데이터만 남는다는 재현 보고Imbue, 루트리스 컨테이너와 통합 인증을 묶은 개인 클라우드 'Cloud in a Bottle' 공개Balrogg, Vorbis·Opus 파일을 최대 15% 무손실 재압축하는 .blr 아카이버LTT Labs, 뚜껑을 제거한 Intel Core i9-14900KS의 12시간 CT 스캔 공개테런스 타오, 에너지 항등식을 보존하는 3차원 평균 나비에-스토크스 변형식의 유한시간 폭주 구성Commodore 64용 Apple II+ 클론 Spartan, 2년간 광고만 내다 1986년 출시Isar Aerospace, Spectrum 2차 발사에서 첫 탑재체와 함께 궤도 진입Rust dyn Trait의 fat pointer와 vtable을 C++ 다형성과 메모리 배치로 해부LLM 의존을 전염 모델로 본 논문, 임계점 뒤 인지 능력 급락 가능성 제시OCaml 입문서 영어판 무료 공개, 해커뉴스는 LLM 시대의 학습 가치 토론독일 민간 이사르 에어로스페이스 스펙트럼, 노르웨이 안되위아에서 궤도 도달2026 이그 노벨상, 안전 우려로 취리히에서 열리고 ‘키스’ 정의와 상류층 윤리 연구 수상280개 색상 변경 연속 컨트롤러를 내세운 Terpstra 등형 음악 키보드.gitignore를 허용 목록으로 뒤집자는 제안, HN은 전역 dotfile 무시와 선택적 스테이징을 대안으로 제시담배 회사의 식품 인수가 초가공식품 확산과 비만 증가를 이끌었다는 UCSF 교수 주장위키미디어 재단 미국 직원, NLRB 선거로 CWA 로컬 9415 노조 결성PS5 파생 BC-250 채굴 보드, BIOS 개조와 리눅스로 게임 PC 전환전 3M 과학자가 말한 PFAS 은폐, 1970년대 독성 인지 뒤에도 생산 지속프랑스 bare metal에서 운영한다는 EU Git 호스팅 Pushin.eu, 초대 전용 베타 공개위스콘신 경찰, 합법적 촬영 뒤 민원 낸 해군 퇴역군인을 Flock으로 100회 넘게 추적uutils coreutils 0.11.0, 파싱 오류에 인수와 문제 위치를 가리키는 컴파일러식 진단 추가Kale, 표 구조 변경 때 수식 범위가 뜻밖에 바뀌는 오류를 제한된 참조 표현으로 차단네덜란드 중앙은행, 미국·캐나다 금 86톤을 런던으로 이전CodeRabbit 평가에서 GPT-6 Astra, 코드리뷰 버그 탐지율 Sol 대비 4%·교차 파일 20% 높아Git 서브모듈은 정확히 커밋을 고정하지만 워크트리와 충돌하고 URL 변경에도 취약함