2011-09-01 5 views
1

체크섬을 제어하여 작업을 실행하기위한 코드 세그먼트의 무결성을 검사하는 커널 모듈을 작성 중입니다. 나는 몇 가지 장애물로 실행 :메모리 무결성을 검사하는 Linux 커널 모듈

    가 커널에 의해 수출되어 있지 않은 경우 나는 (그런 기호 ksyms에 없다)을 module_list 변수를 얻을 수있는 방법
  1. ? lsmod 명령을 호출하는 모든 모듈을 볼 수 있습니다. 어떻게 모듈에서 가져올 수 있습니까?
  2. 내 모듈이 실행되는 동안 일부 코드 세그먼트가 변경 되었음이 표시됩니다. 항상 특정 라이브러리에서 발생합니다. 왜 그렇게됩니까? 코드 세그먼트가 일정하다고 생각했습니다.
  3. 커널 모듈의 프로세스 데이터에 대한 메모리 액세스를 제어하는 ​​것이 가능합니까?
+0

질문 3을 이해할 수 없습니다. "진짜입니까?" 어떤 종류의 컨트롤을 원하십니까? –

+0

간단히 말하자면, 어떤 작업이 자신의 데이터 또는 코드를 수정한다는 사실을 제어하고 싶습니다. –

답변

4

자체 수정 코드가 완벽하게 지원됩니다. 그것에는 아무런 문제가 없으며 모든 종류의 것들에 사용됩니다. 코드가 일정하다는 가정은 단순히 정확하지 않습니다. 있을 수도 있지만 그렇지 않을 수도 있습니다.

한 가지 전형적인 예는 SMP 대 UP 시스템입니다. 예를 들어, Pentium 4 급 Xeon 시스템에서 잠기지 않은 증가분은 잠긴 증가분보다 60 사이클 짧을 수 있습니다. 잠긴 증분은 SMP 시스템에서만 필요합니다. 런타임시 조건 오버 헤드없이 동일한 코드가 UP 및 SMP 시스템에서 작동하게하려면 일반적으로 자체 수정 코드가 사용됩니다. lock 명령어 대신에 ud2과 같은 잘못된 연산 코드가 사용됩니다. 잘못된 명령 인터럽트가 발견되어 ud2은 SMP 시스템에서는 lock으로, UP 시스템에서는 nop으로 바뀝니다.

커널은 모듈 인터페이스를 내 보냅니다. 내 보낸 :

__module_text_address __symbol_get symbol_put_addr use_module 
module_layout module_put __module_put_and_exit module_refcount 
register_module_notifier __symbol_put unregister_module_notifier module_get 

정말로 원하면 /proc/modules을 구문 분석 할 수도 있습니다.

+0

내 커널이 내 심볼을 내 보내지 않습니다. –

+0

그런 다음 수정하십시오. 이것이 오픈 소스 소프트웨어의 가장 큰 장점입니다. (어떤 버전? "모듈"또는 "심볼"에 대한 Grep을 내 보냅니다.) –

+0

명령어 대안 외에도 적절한 커널과 모듈의 메모리 이미지 수정에 의존하는 추적/디버깅 기능이 있습니다 . 커널 마커와 Ftrace가 가장 먼저 떠오르게됩니다. 예를 들어, Ftrace (x86)는 각 함수의 프롤로그 ('call mcount') 이후에 필요한 나머지 데이터를 수집하기 위해 다른 함수를 호출하여 영구적으로 5 바이트를 대체 할 수 있습니다. – Eugene

관련 문제