본문 바로가기
코스웨어/12년 내장형하드웨어

[리눅스 커널]2012/10/22 작업일지(데비안6 커널 2.4 Module Wrapping) - by. 이창현

by 알 수 없는 사용자 2012. 10. 22.
728x90
반응형

데비안 6에서 커널 2.4.27 모듈래핑.

그림 1) 함수 만들어지는 과정 1.

1. 모듈 래핑 하기전에 sys_call_table[__NR_open] 이라는 함수가 중요한데 sys_call_table[__NR_open] 이라는 함수가 나오게 되는 과정을 우선 알아 보려 한다. 그림 1) 에서 /include/asm-i386/ 에 Unistd.h 헤더파일을 연다. #define __NR_open    5 를 메모장에 복사한다.

 

그림 2) 함수 만들어지는 과정 2.

2. 다음으로 찾아 볼 함수는 바로 ENTRY(sys_call_table) 이다. 이 함수는entry.S 라는 어셈블리 파일에 있다. 이 파일은 /arch/i386/kernel/ 이라는 곳에 있다.  entry.S 에서 ENTRY(sys_call_table) 를 메모장에 복사하여 함수 명을 유추 하야 보겠다.

 

그림 3) 함수 유추.

3. 처음으로 ENTRY(sys_call_table) 에서 sys_call_table 를 가져온다. 그리고 [] 를 추가 한다. 다음으로 #define __NR_open 에서 __NR_open 을 가져와서 sys_call_tab[] 에 넣어주면 sys_call_tab[__NR_open] 함수 유추가 다 되었다.

 

그림 4) 커널 2.4.27 모듈래핑 소스.

4. 그림 4)는 커널 2.4.27 버전에서 모듈래핑을 하는 소스이다. 일단 맨 처음 부분은 다른 모듈로 링크를 시켜 다시 원래대로 돌아오기 위해 넣은 구문이다. 2번째 구문은 커널에서만 출력이 가능하기에 printk 를 사용하였다. 3번째 구문이 원하는 작업을 하는 부분이다. 원래 모듈을 가리키는 주소를 다른 만들어 논 모듈로 연결 시키는 부분이다. 4번째 구문은 다른 모듈로 연결 시켰던 모듈을 끊고 다시 원래 모듈로  되돌린다.

 

그림 5) insmod 로 모듈 추가.

5. 컴파일 시키고 insmod 로 만들어 놨던 모듈을 추가 시킨다. 추가 시키는 순간 어떠한 정보들이 뜨는 것을 볼 수있다. 원하던 결과를 얻은 것이다. 이 모듈 래핑은 커널 2.4 까지만 된다. 2.6 이상에서는 할 수가 없다. 왜냐하면 이 모듈래핑이 공격 하는 기법으로 많이 사용 되었기 때문이다. 그러므로 테스트를 할려면 데비안 6 커널 2.4 버전에서 하기 바람.

 

그림 6) ll 이라는 명령어로 나타나는 파일 정보들.

6. 그림 6)은 wrapping 이라는 모듈을 등록한 이후 ll이라는 명령어를 입력했을때 보여주는 파일 정보들이다.

 

그림 7) rmmod로 모듈 제거.

7. 이제 다시 원래 모듈로 돌리기 위해  wrapping 모듈을 제거 한다. 제거 하기 위해서 rmmod wrapping 를 입력하면 마지막에도 파일 정보를 보여 주고 원래의 모듈로 돌아온다.

 

 

 

  

 

  

728x90