Kernel vulnerabilities are critical in terms of security because they allow attackers to gain unprivileged root access. Although there has been much research on finding kernel bugs from kernel source code, there are relatively few research on kernel fuzzing. Existing kernel fuzzing techniques involve passing random values to kernel API function as their parameters. However, such a simple approach does not find latent bugs deep in the kernel, because many API functions are dependent on each other, the most of API functions calls with random values are rejected and return errors. In this paper, I propose a novel kernel fuzzing technique that leverages inferred dependence model between API function calls to discover deep kernel bugs. I implement this technique on a fuzzing system, called IMF. IMF has found 32 previous unknown kernel vulnerabilities on the macOS version 10.12.3.
커널 취약점은 공격자가 권한 상승을 위해서 사용하기 때문에 보안 측면에서 매우 위험하다. 소스코드 분석을 통해서 커널 취약점을 찾는 연구는 비교적 많이 있었으나, 소스코드가 필요 없는 커널 퍼즈 테스팅을 통해서 커널 취약점을 찾는 연구는 상대적으로 적다. 현존하는 커널 퍼즈 테스팅 기법들은 커널 API 함수를 임의의 인자들과 함께 실행하여 진행된다. 그러나 이런 방식의 퍼즈 테스팅은 API들 간의 관계를 고려하지 않기 때문에 대부분의 API 호출들이 오류를 반환하게 되어 커널 깊은 곳에 존재하는 취약점을 찾기에는 적합하지 않다. 이를 해결하기 위해서 API 로그로부터 API들 간의 관계 및 모델을 추론하여 커널 퍼즈 테스팅에 이용했다. 실제로 IMF 라는 이름의 커널 퍼저를 구현한 후, macOS 10.12.3을 대상으로 퍼징을 진행하여 총 32개의 알려지지 않은 취약점을 찾았다.