월 33,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결리눅스 커널 해킹. A부터 Z까지
SMAP 우회에서 궁금한게 하나 있습니다.
분명 smap 기법이 적용되어있으면 커널에서 유저영역의 코드에 rwx 자체를 못한다고 되어있는데 어떻게 ROP 가젯으로 유저영역의 shell() 함수를 사용할수 있는것이고 이것이 왜 실행되는지 궁금합니다.
- 미해결리눅스 커널 해킹. A부터 Z까지
KADR 우회에서 init파일이 없는 경우는 어떻게 하나요?
커널 문제를 찾아보다가 cpio를 풀어도 init 파일이 없는 문제가 있었는데 이런 경우 우회를 어떤 식으로 해야 하나요?
- 미해결리눅스 커널 해킹. A부터 Z까지
KADR 우회에서 init파일이 없는 경우는 어떻게 하나요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 해결됨리눅스 커널 해킹. A부터 Z까지
여전히 해결책 없는 build_result
커널과 cpio 를 하라는데로 했음에도 Build_result는 find를 써도 찾을수가 없습니다. 제가 어느 부분에서 누락된 걸까요?아니면 폴더를 따로 만들어서 복붙한건가요? 복붙의 경우 bimage에 우분투 기준으로X표시가 생깁니다ked@ked-VirtualBox:~/Desktop/classk/linux-5.8.5$ make -j 4DESCEND objtoolCALL scripts/atomic/check-atomics.shCALL scripts/checksyscalls.shCHK include/generated/compile.hKernel: arch/x86/boot/bzImage is ready (#1)이런식으로 빌드가 완료됬긴 했으나 실제로 Build_result가 생기진 않습니다. 3년전 영상이라 그런지 몰라도 bzImage는 있어도 Build_result 폴더는 없습니다. 해당 위치를 그냥 Build_result처럼 사용하면되나요?
- 미해결리눅스 커널 해킹. A부터 Z까지
KASLR 강의에서 주어진 환경에서는 /proc/kallsyms 확인 못하는 것이 맞나요?
파일 다운 후 커널에서 head -3 proc/kallsyms 를 해보니 주소가 000000000~으로 나옵니다. root 권한이 아니여서 그런 것 같은데 강의 사진은 따로 root권한이 있는 환경에서 실행한 화면인가요?
- 미해결리눅스 커널 해킹. A부터 Z까지
build_result가 안보입니다
커널과 cpio 를 하라는데로 했음에도 Build_result는 find를 써도 찾을수가 없습니다. 제가 어느 부분에서 누락된 걸까요?아니면 폴더를 따로 만들어서 복붙한건가요? 복붙의 경우 bimage에 우분투 기준으로X표시가 생깁니다
- 미해결리눅스 커널 해킹. A부터 Z까지
kernel stack pivoting에서 gadget 관련 질문드립니다.
stack pivoting 예제에서 gadget을 찾지 못합니다.bzImage 에서는 xchg gadget이 존재하는데vmlinux에서는 xchg gadget이 존재하지 않습니다. bzImage 내 gadget 주소와 kernel base 주소를 더해도 예제(exp.c)에서 사용한 gadget 주소(0xffffffff8176b4fd) 가 나오지 않습니다. 이런 경우엔 어떤 방법으로 gadget 주소를 구해야 할까요? 위 내용 확인해 주시면 감사하겠습니다.
- 미해결리눅스 커널 해킹. A부터 Z까지
안녕하세요 수강중 궁금한 것이 있습니다.
해당 수업을 들으면서, 선생님이 미리 짜놓은 코드로만 진행이 되어서 그저 기계처럼 따라만 하고 있어서 전혀 이해가 가지 않습니다..혹시 해당 코드가 어떻게 제작되었는지부터 이해하려고 하는데, 어떤것을 보면서 수업을 들으면 도움이 될까요?
- 미해결리눅스 커널 해킹. A부터 Z까지
pwndbg가 커널에 attach는 되는데 디스어셈코드나 레지스터 표시가 안됩니다.
위 사진과 같이 디버거에 아무런 정보도 표시가 되지 않습니다. vmlinux도 추출해놓은 상태입니다.
- 미해결리눅스 커널 해킹. A부터 Z까지
가젯에 대해 이해가 잘 안됩니다.
pop rax; ret;0x6f0에서 pop rax; ret; 어셈블리가 어떻게 rax에 0x6f0을 넣게 되는 건가요?
- 해결됨리눅스 커널 해킹. A부터 Z까지
Kernel KPTI 적용시 영향?
/mnt/c/Users/msh/Desktop/stack_based_BOF 1m 26s ❯ grep ": mov rdi, rax ; rep" ./gadgets.txt 0xffffffff8145a958 : mov rdi, rax ; rep movsb byte ptr [rdi], byte ptr [rsi] ; jmp 0xffffffff8145a368 0xffffffff814747df : mov rdi, rax ; rep movsb byte ptr [rdi], byte ptr [rsi] ; jmp 0xffffffff81474961 0xffffffff81479c79 : mov rdi, rax ; rep movsb byte ptr [rdi], byte ptr [rsi] ; jmp 0xffffffff81479cd8 0xffffffff8150a792 : mov rdi, rax ; rep movsb byte ptr [rdi], byte ptr [rsi] ; jmp 0xffffffff8150a391 0xffffffff81b08ab4 : mov rdi, rax ; rep movsb byte ptr [rdi], byte ptr [rsi] ; jmp 0xffffffff81b08a75 0xffffffff82a213e5 : mov rdi, rax ; rep movsb byte ptr [rdi], byte ptr [rsi] ; jmp 0xffffffff82a212b9 0xffffffff82a48d7c : mov rdi, rax ; rep movsb byte ptr [rdi], byte ptr [rsi] ; jmp 0xffffffff82a48d92 0xffffffff81b098e6 : mov rdi, rax ; rep movsb byte ptr [rdi], byte ptr [rsi] ; pop rbx ; pop rbp ; ret 0xffffffff82a081f0 : mov rdi, rax ; rep movsd dword ptr [rdi], dword ptr [rsi] ; ret 0xffffffff81132ad8 : mov rdi, rax ; rep movsq qword ptr [rdi], qword ptr [rsi] ; jmp 0xffffffff81132970 0xffffffff81b2413b : mov rdi, rax ; rep movsq qword ptr [rdi], qword ptr [rsi] ; retgef➤ x/10xi 0xffffffff82a081f0 0xffffffff82a081f0: Cannot access memory at address 0xffffffff82a081f0 gef➤ x/10xi 0xffffffff81132ad8 0xffffffff81132ad8: mov rdi,rax 0xffffffff81132adb: rep movs QWORD PTR es:[rdi],QWORD PTR ds:[rsi] 0xffffffff81132ade: jmp 0xffffffff81132970 0xffffffff81132ae3: call 0xffffffff81b26270 0xffffffff81132ae8: nop DWORD PTR [rax+rax*1+0x0] 0xffffffff81132af0: push r15 0xffffffff81132af2: push r14 0xffffffff81132af4: push r13 0xffffffff81132af6: mov r13,rdi 0xffffffff81132af9: push r12KPTI가 적용된 커널에서 일부는 주소를 찾아도 gdb로 확인을 할 수 없는데, 왜 그런건가요?user level에서 page table이 줄어들어서 특정 부분이 빠지다보니, 그 가젯이 있는 부분도 빠져서 안보이는거 같은데, 약간 이상한거같습니다.[ Legend: Modified register | Code | Heap | Stack | String ] ───────────────────────────────────────────────────────────────────────────────────────────────────────── registers ──── $rax : 0xffffffff81b2c390 $rbx : 0x0 $rcx : 0x0 $rdx : 0x22a $rsp : 0xffffffff82403eb0 $rbp : 0x0 $rsi : 0x83 $rdi : 0x0 $rip : 0xffffffff81b2c3ae $r8 : 0xffff88801f01dec0 $r9 : 0x200 $r10 : 0x0 $r11 : 0x2f7 $r12 : 0x0 $r13 : 0x0 $r14 : 0x0 $r15 : 0x0 $eflags: [ZERO carry PARITY adjust sign trap INTERRUPT direction overflow resume virtualx86 identification] $cs: 0x10 $ss: 0x18 $ds: 0x00 $es: 0x00 $fs: 0x00 $gs: 0x00 ───────────────────────────────────────────────────────────────────────────────────────────────────────────── stack ──── [!] Unmapped address: '0xffffffff82403eb0' ─────────────────────────────────────────────────────────────────────────────────────────────────────── code:x86:64 ──── 0xffffffff81b2c3a5 verw WORD PTR [rip+0x4d94d6] # 0xffffffff82005882 0xffffffff81b2c3ac sti 0xffffffff81b2c3ad hlt → 0xffffffff81b2c3ae mov ebp, DWORD PTR gs:[rip+0x7e4e4fab] # 0x11360 0xffffffff81b2c3b5 nop DWORD PTR [rax+rax*1+0x0] 0xffffffff81b2c3ba pop rbx 0xffffffff81b2c3bb pop rbp 0xffffffff81b2c3bc pop r12 0xffffffff81b2c3be ret ─────────────────────────────────────────────────────────────────────────────────────────────────────────── threads ──── [#0] Id 1, stopped 0xffffffff81b2c3ae in ?? (), reason: SIGINT ───────────────────────────────────────────────────────────────────────────────────────────────────────────── trace ──── [#0] 0xffffffff81b2c3ae → mov ebp, DWORD PTR gs:[rip+0x7e4e4fab] # 0x11360 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── gef➤ x/10xi 0xffffffff82a081f0 0xffffffff82a081f0: Cannot access memory at address 0xffffffff82a081f0혹시 몰라서 qemu script에서 qemu64로 바꿔서 kpti를 끄고 gdb를 달아서 테스트를 해봤더니, 이상하게 나오네요.$r12 : 0x0 $r13 : 0x0 $r14 : 0x0 $r15 : 0x0 $eflags: [ZERO carry PARITY adjust sign trap INTERRUPT direction overflow resume virtualx86 identification] $cs: 0x10 $ss: 0x18 $ds: 0x00 $es: 0x00 $fs: 0x00 $gs: 0x00 ───────────────────────────────────────────────────────────────────────────────────────────────────────────── stack ──── [!] Unmapped address: '0xffffffff82403eb0' ─────────────────────────────────────────────────────────────────────────────────────────────────────── code:x86:64 ──── 0xffffffff81b2c3a5 verw WORD PTR [rip+0x4d94d6] # 0xffffffff82005882 0xffffffff81b2c3ac sti 0xffffffff81b2c3ad hlt → 0xffffffff81b2c3ae mov ebp, DWORD PTR gs:[rip+0x7e4e4fab] # 0x11360 0xffffffff81b2c3b5 data16 data16 data16 xchg ax, ax 0xffffffff81b2c3ba pop rbx 0xffffffff81b2c3bb pop rbp 0xffffffff81b2c3bc pop r12 0xffffffff81b2c3be ret ─────────────────────────────────────────────────────────────────────────────────────────────────────────── threads ──── [#0] Id 1, stopped 0xffffffff81b2c3ae in ?? (), reason: SIGINT ───────────────────────────────────────────────────────────────────────────────────────────────────────────── trace ──── [#0] 0xffffffff81b2c3ae → mov ebp, DWORD PTR gs:[rip+0x7e4e4fab] # 0x11360 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── gef➤ x/10xi 0xffffffff82a081f0 0xffffffff82a081f0: int3 0xffffffff82a081f1: int3 0xffffffff82a081f2: int3 0xffffffff82a081f3: int3 0xffffffff82a081f4: int3 0xffffffff82a081f5: int3 0xffffffff82a081f6: int3 0xffffffff82a081f7: int3 0xffffffff82a081f8: int3 0xffffffff82a081f9: int3 gef➤vmlinux를 잘못 추출한건가 싶어서 다시 추출해봤는데도 이상합니다.
- 해결됨리눅스 커널 해킹. A부터 Z까지
qemu 스크립트 실행시 Kernel panic이 발생합니다.
리눅스 커널 분석 환경 세팅 단원에서 qemu세팅 부분 수업을 따라하고 있습니다.먼저 boot.sh파일을 만들고 스크립트를 실행하였는데 다음과 같은 에러가 계속해서 반복됩니다.아래 boot.sh파일과 반복 에러 그림을 첨부하겠습니다.감사합니다.스크립트반복에러
- 해결됨리눅스 커널 해킹. A부터 Z까지
Kernel UAF
안녕하세요!kernel uaf 강의를 듣고 궁금한 점이 있는데요, kernel uaf 예제 취약점을 공격할 때, kmalloc에 별다른 크기 조정을 안하고 드라이버에 지정된 0x90크기로 heap을 할당하고 해제하는 것으로 cred 구조체가 해제된 자리를 사용해서 dangling pointer가 그 영역을 가리킬 수 있었던 것은 cred 구조체의 크기가 0x90 이거나 그보다 작아서 인가요??그리고 추가적으로 혹시 cred 구조체의 크기를 구할 수 있는 방법이 있을까요??좋은 강의 감사합니다!!
- 해결됨리눅스 커널 해킹. A부터 Z까지
디버깅 방법
안녕하세요! 강의도 다시 돌려보고 인터넷도 다 뒤져봐도 커널에서는 gdb로 디버깅을 어떻게 하는지 도저히 모르겠습니다ㅠㅠ지금까지 이해한 바로는/usr/src/linux-headers-$(uname -r)/scripts/extract-vmlinux bzImage > vmlinux를 통해 vmlinux파일 추출하고 gdb ./vmlinux 로 실행한 뒤 target remote localhost:1234 하면 되는 것으로 이해 했는데 아무런 반응이 없습니다... (참고로 현재 pwngdb 사용 중 입니다.) 강사님 예제파일을 보면 보통 c코드, start.sh, rootfs.cpio, bzImage 이렇게 주어지는데 이 파일들로 무엇을 해야 gdb 분석이 가능한가요? 죄송하지만 처음부터 자세하게 설명 부탁드립니다ㅠㅠ 항상 좋은 강의 감사합니다.
- 해결됨리눅스 커널 해킹. A부터 Z까지
강의 자료 문의
안녕하세요. 학습을 시작했는데, 실습자료 외에 강의 자료가 보이지 않습니다.강의자료 공유가 가능하신지요?
- 해결됨리눅스 커널 해킹. A부터 Z까지
boot.sh 실행시
boot.sh실행시 fail to initialize ptp_kvm이라고 나오는데 문제 없는 건가요?
- 해결됨리눅스 커널 해킹. A부터 Z까지
Kernel Debugging
안녕하세요 kernel ROP강의 내용중에서 질문이 있습니다. test.c에서 test_write함수의 char arr[8]이지만 exp.c에서는 memset(rop,0x41,40);을 해주고 있습니다.왜 그러는지 test_write함수를 부를 때 kernel스택 상황을 보고 싶어서 디버깅을 해보았지만 여기서 막힌 상태입니다ㅠㅠ```/usr/src/linux-headers-$(uname -r)/scripts/extract-vmlinux bzImage > vmlinuxgdb ./vmlinuxtarget remote:1234```이후에는 write함수에서 syscall에서 si로 커널 쪽에서 gdb가 작동하는 것을 봤지만 심볼들이 다 죽어있어 test_write함수를 실행할 때 break point를 걸 수 없었습니다.결론적으로는 왜 arr[8]인데 memset으로 40만큼 채워주는지 원인을 찾아내지 못 했습니다.심볼이 다 죽어있고 test_write함수(디바이스 소스코드)를 디버깅할 때 break point를 어떻게 걸 수 있을까요?
- 미해결리눅스 커널 해킹. A부터 Z까지
./boot_sh를 통해 qemu-script 실행 시 커널 실행이 안됩니다.
ubuntu 18 버젼 이상 사용 중이고, 강의에서 진행한대로 설정을 완료하였는데도 ./boot_sh 입력 시 커널 실행이 안되고 있습니다 어떻게 해결해야 할까요?
- 해결됨리눅스 커널 해킹. A부터 Z까지
swapgs_restore_regs_and_return_to_usermode
안녕하세요. 페이지 테이블을 분리해주는 역할을 하는 swapgs_restore_regs_and_return_to_usermode함수를 사용하는 것이 왜 KPTI를 우회할 수 있게 해주는 것인지 궁금합니다.
- 해결됨리눅스 커널 해킹. A부터 Z까지
gdb Permission denied: '/proc/2254/mem'
안녕하세요. 현재 qemu, gdb setting 강의를 수강하고 있는데 쉘 실행까지는 무사히 되었으나 gdb_remote.sh를 실행하면 이와 같이 계속 permission denied라는 애러가 뜹니다. 어떻게 하면 좋을까요?