다음 코드에 대해 hacking에 속하는지 봐주세요..
kernel module에서 application program으로 데이터가 전달되어야 합니
다. 이 데이터는 동적으로 증가하기 때문에 linked list로 작성이 되어 있습니
다.
데이터의 개수나 크기가 동적이기 때문에 user level의 application program
이 데이터를 전송받기 위해 system call을 사용합니다. 새로운 system call을
이용하여 linked list관련 data structure와 function들이 전달되어 데이터 교
환을 수행합니다.
/* kernel level 에서 data를 유지하기 위해 사용하는 자료구조체 입니다. */
struct dm_node
{
/* data 영역 */
dm_node *next;
};
struct dm_list
{
dm_node *head;
dm_node *tail;
/* data 영역 */
};
/* user level에서 data를 수신하기 위해 사용하는 data structure입니다 */
struct ul_node
{
/* data 영역 */
ul_node *next;
};
struct ul_list
{
ul_node *head;
ul_node *tail;
/* data 영역 */
void (*init_list)(ul_list *root);
void (*insert_node)(ul_list *root, ul_node *node);
void *(*alloc_memory)(int size);
};
이중 struct ul_list의 member function인 void *(*alloc_memory)(int
size); 이부분에 hacking의 요소가 있다고 동료가 말하더군요.
alloc_memory 함수에 들어가는 function 주소값은 malloc() 함수의 주소값
이 들어갑니다.
혹 이러한 방법이 비 정상적인지 hacking에 속하는 지가 궁금합니다.
제 생각에는 kernel level은 특권 계층이고 그 계층 내에 user level이 속하기
때문에 사용에 있어 hacking이라고는 생각하지 않지만 약간 헷갈리네요..
고수님들의 판정 바랍니다. (음료수 내기거덩요.. ^^)
네, vulnerable한 커널 코드입니다.커널코드에서 애플리케이
네, vulnerable한 커널 코드입니다.
커널코드에서 애플리케이션이 준 함수주소를 호출하는것고 그렇고, 이전 스레드에서 다른 분이 이미 지적하셨듯이 시스템 콜을 쓰면 여러가지로 안좋겠죠.
답변감사합니다.
그런데 어떤 면에서 취약하다는 건지 그러니까 어떤 시나리오에서 어떻게 공격을 받을 수 있다는 건지 말씀해 주시면 더 도움이 될 거 같습니다.
부탁드리겠습니다.
시스템 콜은 유저 모드의 애플리케이션이 시스템 전반에 치명적 장애를 일으
시스템 콜은 유저 모드의 애플리케이션이 시스템 전반에 치명적 장애를 일으키지 못하도록 지키는 좁은 통로의 역할을 합니다. 암호화와 비슷한 예로 인터페이스가 공개되어 있더라도 뚫리지 않도록 설계되어야 한다는 것입니다.
함수 어드레스에 malloc 말고 다른것을 넣어서 한번 시험해 보십시오. 이를테면 NULL 이라던지, 아니면 printf 라던지, 무한루프를 도는 함수라던지...
댓글 달기