본문 바로가기

reversing/rootkit

(24)
Why use system call? 시스템 콜을 사용하는 이유구글 번역 : https://www.quora.com/What-are-the-main-purposes-of-system-calls시스템 호출은 사용자 프로그램 (사용자 모드에서 실행)이 운영 체제에서 일부 서비스를 요청하는 방법입니다. 즉, 시스템 호출을 통해 사용자 프로그램이 사용자 프로그램을 대신하여 OS에 작업을 요청할 수 있습니다. 예를 들어, 저장 장치와의 I / O를 필요로하는 파일 읽기 및 쓰기. 이러한 시스템 호출 작업은 간단한 라이브러리 호출 / API (libc의 read (), write (), open () 등)의 형태로 일반 사용자에게 공개됩니다. 이러한 작업의 핵심은 전환 후 OS 커널 코드에 의해 실행됩니다 유저로부터 커널에의 모드 (TRAP 명령). ..
rootkit - packet sniff[2] sk_buff에서 ip와 port 같은 내용을 추출할 수 있어서.. 간단하게 테스트해보니 되었다. 이러한 방식으로 데이터를 스니핑 할 수 있을 것 같다. 물론 정교하게 만들어야겠지만... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 1,1 All #include #include ..
rootkit - packet sniff[1] 패킷 구조를 알아 볼겸 raw socket 관련 내용 찾아 보았다. 좀 더 정확하게 만들어 봐야겠다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915..
rootkit - packet sniff[0] packet을 감청하는 루트킷을 만들어 보려고 한다.더 나아가 특정 조건이 맞는 패킷을 전송하게 되면, 특정 포트로 리버스 쉘을 생성하고자 한다. 먼저 사용할 내용은 netfilter라는 프레임 워크를 사용하고자한다.이를 위해서 netfilter와 관련된 내용을 공부한다. netfilter 관련 자료는 다음의 자료를 확인하면서 정리하려 한다. http://www.roman10.net/2011/07/22/how-to-filter-network-packets-using-netfilterpart-1-netfilter-hooks/http://www.tune2wizard.com/kernel-programming-network-programming/ 물론... 인터넷에서 코드를 긁어와서 사용해도 되겠지만... 하나..
rootkit - root [2] root 권한을 만들면서 찾아봤던 이론 내용을 정리하려고 함. linux 상에서 namespaces 개념과 관련된 user_namespace , 권핰 코드 관련 내용을 이해하는데 목표가 있음 namespace 개념c++에서도 namespace라는 개념이 나왔던것 같다.그때의 개념과 linux 상에서의 개념이 비슷한 맥락을 가지는 느낌이다.네임스페이스(namespace)'란 녀석으로 이름충돌을 미연에 방지할 수 있게 하는 역할을 했었다. 네임스페이스를 간단히 말하면, 관련있는 녀석끼리 모여있는 공간을 말한다.간단하게 설명하면 독립적?인 공간, 영역으로 구분하고 관리하는 개념이다. 그리고 리눅스 메뉴얼에서 namspace를 검색해보면 다음과 같이 나온다. A namespace wraps a global sy..
rootkit - root [1] 커널 버전마다 user의 credential을 처리하는 방식이 다양하다. kernel 2.6 버전 이전task_struct의 구조체에서 uid, euid와 같이 권한 설정 파일에 접근가능했음.하지만 차즘 차츰 변화했음 kernel 2.6 버전 이후? --> 확실하지 않음.task_struct의 권한? 관련 부분 내용을 struct cred 로 따로 분리하여서 관리하고 있음그래서 credential를 변경하기 위해서는 struct cred 구조체를 변경해줘야 한다. 사용되는 관련함수prepare_creds()commit_creds() prepare 함수를 이용해서 자신의 cred 구조체를 만든다. 그 후 원하는 설정으로 변경한다.그리고 coomit_creds 함수를 이용해서 등록하는 과정을 이용한다. 1)..
rootkit - vfs hooking [readdir,iterate] 루트킷 자료를 검색하다보면, 인터넷 자료를 뒤지다 보면 file operation에 readdir 함수가 존재한다. 하지만 리눅스 커널 3.11 버전 이후 부터는 readdir 함수가 사라졌다. 그래서 혹시나 되는지 싶어서 시도해본다. 대신에 int (*iterate) (struct file *, struct dir_context *); 라는 함수가 대신한다. 해당 함수의 원형은 /usr/src/kernel_version/include/linux/fs.h 확인하면 된다. 그러면 이제 저 함수의 인자를 살펴본다. 살펴보면 struct file* 는 우리가 아는 내용이다. struct dir_context* 를 살펴보면 우리가 원하는 부분을 찾을수 있다. struct dir_context; /*context..
rootkit - 자료정리 task Virtual File System 관련 rootkit을 만들어 보려고 한다.프로세스의 task struct 부터 데이터에 접근하는 전체적인 매커니즘을 파악한 다음, 흐름을 변경할 vector를 파악한다.그 후, 관련 포인터와 구조체를 확인하고 변경한다.위와 같은 순서로 진행하려고 한다. 위의 struct file 구조체에서 중요 변수 중 f_op 값은 file_operation의 구조체를 가리키고 있다.struct file_operations { struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); ssize_t (*..