Just-In-Time ROP (JIT-ROP), which is the cutting-edge attack on memory corruption vulnerability, utilizes reusable CPU instructions from leaked memory contents. This attack works even if the victim applies per-process fine-grained ASLR. In order to defend against JIT-ROP, the code memory area must be prevented from being read or changed continuously. As the former requires modification or support on
architecture or hardware level, recent studies choose the latter strategy. In the meanwhile, previous studies have some disadvantages.
Some require information from compiler to make sure that the system works. Others modify the original binary which could break software distribution measures. Therefore, this study suggests UniqueBin, a generic JIT-ROP defense that (a) can shuffle code without compiler assistance (b) minimalizes effect on well-known software delivery methods by keeping the original executable. We tested UniqueBin on Linux 32bit system. We observed a result of 39.71% reusable CPU instructions replaced or removed, with 2.81% performance overhead.
메모리 손상 취약점을 이용한 최신 공격기술인 just-in-time ROP (JIT-ROP)은 공격자가 재사용할 수 있는 CPU 명령어를 유출된 메모리 내용에서 실시간으로 검색하여 공격 수단으로 활용한다. 이는, 방어자가 프로세스별 fine-grained ASLR을 적용해도 활용 가능한 공격법이다. JIT-ROP을 방어하기 위해서는 코드 메모리 영역을 읽지 못하도록 조처하거나 계속해서 변경해야 한다. 전자의 경우, 아키텍처 혹은 하드웨어 단의 변경 또는 지원이 불가피하다. 따라서, 최근 연구들은 후자의 전략을 선택하고 있다. 그런데, 앞선 연구들은 원본 바이너리를 수정하거나 컴파일러 단의 정보가 필요하다는 단점이 있다. 그러므로 본 연구는 (1) 컴파일러에서 받은 정보가 없어도 코드를 섞을 수 있다. (2) 원본 바이너리를 보존하므로, 디지털 서명이나 콘텐츠 전송 네트워크와 같이 기존에 확립된 시스템에 미치는 영향을 최소화한다. 위와 같은 개선점을 근거로 범용성에 초점을 맞춘 JIT-ROP 방어 기술을 소개한다. 이를 리눅스 32bit 시스템에 적용했으며, 그 결과 39.71%의 재사용 가능 CPU 명령어들을 교체하거나 제거할 수 있었고, 시스템 성능에 미치는 영향은 2.81% 정도에 달하는 것으로 관측되었다.