본 사이트는
.com
사이트 제작 도구로 제작되었습니다. 지금 나만의 사이트를 만들어보세요.
시작하기
  • Home

  • About

  • Blog

  • More

    Use tab to navigate through the menu items.
    • All Posts
    • Linux kernel
    • linux-mm
    • Training
    • Practice
    • WAIOS
    • Parallel Computing
    • Hardware
    • System hacking
    • linux-hardening
    • Patch review
    • etc
    • Performance
    • Tracing
    • Study note
    검색
    [Arm64] KSMA attack과 init_pg_dir 도입 분석
    Wonhyuk Yang
    • 2021년 6월 20일

    [Arm64] KSMA attack과 init_pg_dir 도입 분석

    arm64 아키텍처에서는 다른 아키텍처와 다르게 부팅때 사용되는 페이지 테이블이 다른데요. init_mm의 구조체가 아래와 같이 구성되어 있어, 초기 페이지 테이블이 swapper_pg_dir인지 init_pg_dir였는지 혼동하기 쉬운 것 같아요. init_mm 구조체는 모든 아키텍처에서 사용되는 녀석인데요, 보시다시피 pgd의 초기 값을 swapper_pg_dir으로 세팅해요. 그런데, 밑에 INIT_MM_CONTEXT 매크로가 있는데요. 이 녀석이 arm64 아키텍처일 경우 pgd를 init_pg_dir로 교체해줘요. 정말 독특하지요? 매크로의 구성은 아래와 같아요~ 그러면 자연스럽게 "왜 arm64 아키텍처만 init_pg_dir이라는 초기 페이지 테이블을 사용하지?" 라는 질문이 떠오르는데요, 결론부터 얘기하면 Arm64의 KSMA(Kernel Space Mirroring Attack) 공격을 어렵게 하기 위해 도입된 것이에요. 자, 그러
    조회수 110회댓글 1개
    inline assembly을 활용한 shellcode 작성
    Wonhyuk Yang
    • 2021년 6월 19일

    inline assembly을 활용한 shellcode 작성

    System hacking ctf 문제를 풀다보면, 쉘코드가 필요할 때가 있는데요. 직접 어셈블리어로 짤 수 있어요, 하지만 이 방법은 타켓 아키텍처에 익숙하지 않은 이상 까다로운 일이에요. 그 다음으로 웹 상에서 원하는 쉘 코드를 가져올 수 있는데요. 대표적으로 shell-storm와 같은 사이트에서 내가 원하는 쉘 코드를 복사하면 편리하지요. 하지만 쉘코드들은 가지각색으로 등록되어 있고, 원하는 쉘 코드가 존재하지 않을 수도 있어요. 그래서 직접 GCC inline assembly과 objcopy의 조합으로 쉘 코드를 만드는 방법에 대해 알아볼게요. 이미 inline assembly에 능숙하다면 손쉽게 (glibc의 syscall 함수와 비슷하게) 쉘코드를 짤 수 있어요 . 우선 아래와 같은 코드에서 쉘코드를 삽입한다고 생각해볼게요. 이제 인라인 어셈블리를 통해 입맛대로 인자와 원하는 시스템 콜을 호출하는 오브젝트 파일을 생성해볼게요. 이 함수
    조회수 48회댓글 0개
    [Training] Arm v8 Linux kernel head.S 찍어먹기 (完)
    Wonhyuk Yang
    • 2021년 6월 13일

    [Training] Arm v8 Linux kernel head.S 찍어먹기 (完)

    지난 시간에는 MMU를 활성화하기 전에 필요한 여러가지 시스템 레지스터들을 세팅해줬어요. 이제 MMU를 활성화시키고 start_kernel 함수로 진입할 때가 되었네요. 자 그럼 힘차게 살펴보도록 할게요. 해당 글의 타겟 아키텍처는 aarch64이고, kernel code는 5.1버전을 다룹니다. 유의하세요! __primary_switch __cpu_setup 함수 다음에는 __primary_switch 함수가 호출되어요. 해당 함수는 RELOCATBLE 관련 옵션이 꺼져있다면 굉장히 단순한데요, 아래의 코드에서 해당 함수가 어떻게 구성되었지 확인해볼까요? 라인 2~3에서 x1 레지스터에 init_pg_dir의 주소를 저장해요. 그리고 __enable_mmu 함수를 호출해요. 이 함수에서 mmu가 활성화돼요. 라인 4~6에서는 __primary_switched로 pc를 이동하려고 branch하는 내용이 있어요. 여기서 주의깊게 볼 것은 ldr 인스
    조회수 261회댓글 0개
    [Training] 링맹(링커 스크립트 문맹) 탈출기 - Linux kernel 64 bit RISC-V (작성중)
    Paran Lee
    • 2021년 6월 2일

    [Training] 링맹(링커 스크립트 문맹) 탈출기 - Linux kernel 64 bit RISC-V (작성중)

    이번에는 링커 스크립트에 대한 필수적인 내용을 알아보려고 해요. 링커 스크립트의 기본적인 문법과 예제로 리눅스 커널의 vmlinux.lds.S 기준으로 알아보도록 할께요. TODO: 기본적인 문법을 정리하자. 아래는 linux/include/asm-generic/vmlinux.lds.h 경로에 위치한 주석 부분의 내용을 보기 편하게 나눠 놓았어요. 1 ~ 7: 링커 스크립트의 최소한의 내용을 샘플로 보여주고 있고, 아키텍쳐마다 특별한 구현이 있을 수 있다는 내용의 주석이네요. 9: OUTPUT_FORMAT 은 어떤 ELF 형식의 파일을 사용할 지 알려주는 커맨드에요. 8: OUTPUT_ARCH 는 어떤 아키텍쳐 형식으로 지정하는 커맨드에요. 10: 프로그램이 올라간 메모리 레이아웃에서 맨 처음 어떤 주소부터 시작할지 알려주는 커맨드에요. 11: SECTIONS 는 크게 아래 처럼 구성해요. TODO: 안의 구성을 조사할 필요가 있음. 44 ~ 46
    조회수 95회댓글 0개
    [Training] Arm v8 Linux kernel head.S 찍어먹기 (6)
    Wonhyuk Yang
    • 2021년 6월 1일

    [Training] Arm v8 Linux kernel head.S 찍어먹기 (6)

    이전 시간에는 두 개의 매핑 테이블을 만드는 과정을 살펴봤어요. 이제 남은 것은 CPU가 가상 메모리를 활성화 시키고, 해당 매핑 테이블을 사용하도록 시스템 레지스터들을 세팅해주는 일이에요. 이 부분은 하드웨어어 매우 밀접한 부분이므로, 중요한 레지스터들만 살펴보도록 할게요. 그럼 시작해볼까요? 해당 글의 타겟 아키텍처는 aarch64이고, kernel code는 5.1버전을 다룹니다. 유의하세요! __cpu_setup 아래의 코드는 __create_pagetable 다음에 호출되는 __cpu_setup 함수에요. 위 코드 블록에서 하는 일들은 사실 그렇게 중요한 내용이 아니에요. Line 2~3에서는 주석대로 Local TLB를 invalidate해요. Line 5~6에서는 CPU의 부동소수 연산 기능을 활성화시켜요. Line 7~11은 디버깅과 관련된 세팅이에요. 보신 대로, MMU와는 상관없는 부분이에요. 이 아래부터 MMU 활성화에 관련된
    조회수 116회댓글 0개
    [Practice] 64비트 RISC-V Linux Kernel 을 QEMU + GDB 를 활용하여 동적 분석하기
    Paran Lee
    • 2021년 5월 31일

    [Practice] 64비트 RISC-V Linux Kernel 을 QEMU + GDB 를 활용하여 동적 분석하기

    Linux Kernel 컴파일 우리가 열심히 동적 분석할 대상인 리눅스 커널을 컴파일하기 위해 아래 패키지를 설치해보도록 해요. 이제 컴파일할 리눅스 소스코드를 받아야겠죠! 우선 컴파일 타켓을 설정하구요. 해당 파일을 source 커맨드로 환경변수 설정을 하셔야 하구요. 디버깅 심볼을 좀 더 잘 확인하기 위해서, Makefile 에서 컴파일 옵션을 조금 바꿔보려고 해요. 리눅스 커널은 컴파일한 이미지의 코드 조차도 최적화해서 사용하기 때문에 아래의 한 줄 소스 수정도 필요해요. 컴파일이 문제 없이 잘되었으면, 아래 명령어로 .config 설정을 수정하고 다시 컴파일하면 좋을 것 같아요. $ make menuconfig 설정 터미널이 나오면 아래의 설정을 on 시켜줄까요? > Kernel hacking > Compile-time checks and compier options > Provide GDB scripts for k
    조회수 373회댓글 2개

    © 2023 by WHOAMI