이 방식은 ROP(Return‑Oriented Programming) 같은 기존 코드 재사용 공격과 다르다. ROP가 반환 주소 조작에 의존한다면, SFOP는 연속적인 크래시와 신호 처리 과정 자체를 제어 흐름 체인으로 사용한다.
주요 목표는 다음과 같다.
즉 공격자가 기존 코드의 흐름을 가로채 임의의 실행 경로를 만들지 못하도록 하는 것이다.
하지만 CET는 기본적으로 프로그램 내부의 비정상적인 제어 흐름 이동을 차단하는 데 초점을 둔다.
SFOP는 바로 이 점을 우회한다.
SFOP의 핵심 아이디어는 운영체제가 처리하는 신호 전달(signal delivery) 자체가 합법적인 제어 흐름 전환이라는 점이다.
공격 과정은 대략 다음과 같다.
이렇게 SIGSEGV 핸들러가 연쇄적으로 연결된 실행 단계가 된다. 각 단계는 운영체제가 허용하는 정상적인 제어 흐름이기 때문에 CET이 일반적으로 검사하는 간접 분기나 반환 보호를 우회할 수 있다.
Linux에서 프로그램은 SIGSEGV 같은 신호에 대해 signal handler를 등록할 수 있다. 일반적으로는 다음과 같은 용도로 사용된다.
SFOP는 이 기능을 다음 방식으로 악용한다.
즉 신호 처리 메커니즘 자체가 재사용 가능한 제어 흐름 구성 요소가 되는 셈이다.
연구진과 보안 엔지니어들은 SFOP와 같은 공격을 줄이기 위한 여러 대응책을 제안했다.
하나의 방향은 Linux 커널의 신호 처리 동작을 강화하는 것이다. 반복적인 segmentation fault와 signal handler 체인을 이용한 공격 가능성을 줄이기 위한 커널 수준 수정이 논의되고 있다.
현재 공개된 요약 자료에서는 구체적인 구현 세부 사항이 제한적으로 공개되어 있다.
또 다른 방어책은 PLaTypus라는 연구용 보안 계층이다.
PLaTypus는 다음 방식으로 이를 완화한다.
SFOP는 중요한 보안 교훈을 보여준다.
하드웨어 보안 기능만으로는 충분하지 않으며, 운영체제 동작과의 상호작용까지 고려해야 한다는 점이다.
CET처럼 강력한 CPU 보호 기능도 공격자가 **합법적인 시스템 메커니즘(예: 신호 처리)**을 활용하면 우회될 수 있다.
따라서 향후 보안 설계에서는 다음과 같은 접근이 중요해진다.
이 모든 계층을 함께 고려하는 전체 스택 보안 모델이다.
Comments
0 comments