Context-free grammar(CFG)는 프로그래밍 언어의 코드를 parsing 하는 데에 유용한 이론적 도구로 쓰입니다. 일례로, parsing 도구 중 하나인 Yacc는 CFG용 parser를 생성합니다. 그러나 실제로는 다수의 프로그래밍 언어가 context-free 하지 않은 문법을 가집니다.
C
C는 널리 사용되는 언어 중 하나이며 거의 context-free 한 문법을 가져 위 내용을 설명하기 좋은 예입니다.
CFG는 형식 언어 및 프로그래밍 언어와 관련하여 다양한 방식으로 정의됩니다. 본 글에서는 명명법에 대해 깊이 파고들지는 않습니다-이에 관한 내용이 궁금하다면 관련 토론을 참고하세요. 본 글에서 C의 문법이 CFG가 아니라고 하는 것은, Yacc에 주어진 문법이 다른 곳에서 오는 몇몇 context information을 참조하지 않고는 C를 올바르게 parsing 하기에 충분하지 않다는 것을 의미합니다. 몇 가지 예를 들어보겠습니다.
생소할 수도 있지만, T가 type이면 상기 C 코드는 type T의 x에 대한 유효한 선언입니다. 그러나 T가 알려진 type이 아니면 argument x를 가진 function T에 대한 호출이 됩니다. C parser는 T가 이전에 typedef에 의해 정의되었는지 여부를 알지 못한 채 어떻게 parsing 할 방법을 알 수 있을까요?
혹자는 "하지만 누가 이런 코드를 작성하나요?"라고 할 수도 있을 겁니다. 좋아요, 그렇다면 좀 더 표준적인 코드를 보죠:
하드웨어 백도어에는 다양한 방법론이 적용될 수 있습니다. Intel Management Engine(ME), AMD Platform Security Processor(PSP) 등과 관련한 방법론도 있고, 2018년 중국 스파이가 미국 기술 공급망에 침투해 Supermicro 사의 마더보드에 물리적인 칩을 심은 것도 하드웨어 백도어의 일례입니다.
여러 보안 컨퍼런스에 거의 매년 발표 주제로 등장할 정도로 지속해서 연구되는 분야이고, 최근에는 chip-red-pill 팀에 의해 Intel microcode decryptor가 개발되어 이목을 끌었습니다.
Today we've published Intel Microcode decryptor! It gives you an amazing opportunity for researching x86 platforms. You can understand how Intel mitigated spectre vulnerability, explore the implementation of Intel TXT, SGX,VT-x technologies! Enjoy it! https://t.co/CrMYbrPu03pic.twitter.com/pW6iQoUGLJ
— Maxim Goryachy (@h0t_max) July 18, 2022
파고드니 흥미로운 것이 많았지만, 그만큼 양도 방대했기에 본 글에서는 인상 깊었던 연구 중 하나를 골라 얘기해보고자 합니다.
project:rosenbridge
project:rosenbridge는 Christopher Domas(xoreaxeaxeax)가 Black Hat USA 2018을 통해 공개한 연구입니다. 연구가 시사하는 바와 연구에 활용한 접근법, 방법론이 재밌고 참신하다고 생각되는 점이 여럿 있어서(특허를 리버싱 한다거나...) 글의 주제로 선정하였습니다. 글을 읽기 전 그의 발표를 가볍게 들어본다면 이해에 도움이 될 것입니다.