작성
·
460
0
안녕하세요
모듈 프로그래밍을 통해 디바이스 드라이버를 임의로 하나 만들 수 있다는 것을 이해했습니다
특히 디바이스 드라이버가 처리할 system call 구현 부분에서 취약점을 넣는 방식으로 실습 및 테스트가 진행되는 것 같습니다.
궁금한 사항은, 흔히 "커널 취약점"이라고 부를 때
"디바이스 드라이버 취약점"과 동일한 표현인가요?
아니면 디바이스 드라이버 외에도 커널의 다른 부분에 취약점이 존재할 수 있나요? 있다면 어떤 종류가 있을까요?
본 강의에서는 대부분 디바이스 드라이버 내부의 취약점만을 위주로 다루는 것이 맞나요?
답변 1
0
안녕하세요.
1. 모듈 프로그래밍을 통해 취약점이 존재하는 디바이스 드라이버를 커널에 등록한 후 취약점을 공격하는 방식은, 분석해야 할 코드의 범위를 제한할 필요가 있는 CTF 문제에서 주로 사용되는 방식입니다. 물론, 리얼월드에서도 모듈화된 디바이스 드라이버에 취약점이 존재할 가능성이 있습니다.
2. "디바이스 드라이버 취약점" 은 "커널 취약점"의 하위 개념입니다. 단순히 "디바이스 드라이버"에서 발생하는 취약점 외에도 각종 file system, 각 아키텍쳐 별 system call, eBPF, 네트워크 드라이버 및 서브 시스템 등 수 많은 부분에서 취약점이 발생할 수 있습니다.
3. 본 강의에서는 수강생분들께 linux kernel exploit의 기초 개념을 잡아드리기 위해, CTF 문제에서 사용되는, 가장 직관적인 "디바이스 드라이버 취약점" 을 베이스로 강의를 진행하고 있습니다.
다만, 강의의 내용과 리얼월드에서 발생하는 취약점간의 괴리가 크진 않습니다. 여러 종류의 디바이스 드라이버에서 사용되는 file_operations 구조체를 이용한 Interface 방식과 비슷하게, 커널의 각 부분에서는 다양한 XXX_operations 구조체를 이용해 유저와 간접적으로 커뮤니케이션을 진행하기 때문에, 강의에서 설명하는 exploit 방식과 큰 차이가 없다고 볼 수 있습니다. 이 부분은 커널의 주요 코드를 읽어보시면 쉽게 이해가 되실 것입니다.
물론, 일부 file system들은, 직접적인 user input이 아니라 간접적인 커널 함수 호출을 이용해 취약점을 트리거 해야 하는 경우도 존재합니다.
감사합니다.