2012-09-26 4 views
2

작동하지 이용한다. 내가 취약한 커널 모듈의 버퍼 오버 플로우하려고하는 경우에는이 잘 작동하지 않습니다. 다음은 내가하는 일입니다.버퍼 오버 플로우는 내가 과거에 사용자 수준의 프로세스에 대한 버퍼 오버 플로우 공격을 수행 한 커널 모듈

파일로 열어 읽고 쓸 수있는 취약한 커널 모듈이 있습니다. 쓰기 작업은 경계 검사없이 수행됩니다. 그래서 쓰기 작업을하고 버퍼 오버 플로우 내 쉘 코드가있는 환경 변수의 주소로 복귀 주소를 덮어 씁니다. 그러나 뭔가 잘못되고 있습니다. 커널이 충돌하고 재부팅 한 후에/var/log/messages를 열었고 eip가 내가 겹쳐 쓴 주소를 정확하게 가리키고 있음을 발견했습니다. 하지만 여전히 "가상 주소에서 커널 널 포인터 역 참조를 처리 할 수 ​​없습니다"라는 메시지가 나타납니다. 이것이 일어나는 이유는 무엇입니까? 컨트롤이 덮어 쓰여진 반송 주소로 리디렉션되지 않는 이유는 무엇입니까?

참고 : 나는 exec-shield 및 ASLR 기능을 해제 한 상태에서 redhat enterprise linux에서 실행했습니다. 그것은 사용자 공간 상이한 구성 (예를 들어, 다른 페이징 테이블, CPU 권한 비트 등)가 특권 모드에서 실행되기 때문에

+0

security.stackexchange.com에 더 적합 할 수도 있습니다. – bstpierre

+0

@bstpierre 그것을 인식하지 못했습니다 .. 감사합니다. –

답변

4

커널은 커널의 종료를 행하지 않고, 사용자 주소로 이동할 수 없다.

그래서, 커널에 쉘 코드를 얻기 위해, 당신은 (커널 및 복사) 드라이버에 기록 된 버퍼에 쉘 코드를 포장하고, 어떻게 든의 주소를 얻을 수있을 것입니다. 커널지도에 액세스 할 수있는 경우이 열심히 아니지만, 최근 리눅스 배포판은 열심히 커널의 버그를 악용 할 수 있도록 민감한 정보에 대한 잠금 액세스를 시작했다.