리눅스 커널 퍼징용 커널 빌드
리눅스 커널 퍼징을 위한 KCOV, KASAN 등 디버깅 옵션을 활성화한 커널 빌드 과정
본 블로그는 로컬 환경에서 실시되었으며, wsl과 로컬 환경 동일합니다.
linux-6.17.6 버전을 기준으로 작성 되었으며, 모든 설치 과정은 동일하니 linux-6.17.6 부분만 각자 다운받은 버전으로 변경하면 됩니다.
먼저 아래 링크에서 커널 소스를 다운 받는다.
https://kernel.org/
다운을 다 받고, 터미널에서 다음 명령어를 실행 시킨다.
sudo mkdir /usr/src/kernel cd /usr/src/kernel sudo cp /Downloads/linux-linux-6.17.6.tar.xz ./
/usr/src/kernel 경로가 작업 디렉토리가 될 것이다.
이어서 커널 소스가 복사 되었다면 다음 명령어를 실행시킨다.
# 이후부터 작업 편의성을 위해 root 계정 접속 sudo su tar -xvf linux-6.17.6.tar.xz cp ./linux-6.17
다음으로 의존성 관련 설치를 진행한다.
sudo apt update sudo apt install -y build-essential libncurses-dev bison flex libssl-dev libelf-dev dwarves libdw-dev libdwarf-dev zlib1g-dev libiberty-dev bc fakeroot cpio kmod rsync curl clang llvm lld gawk
의존성 설치 완료 후 퍼징에 필요한 옵션 등을 만져준다.
make menuconfig 만약 오류나면 화면을 키우고, 뭔 퍼런 창 뜨면 ESC 두번 입력 다음 빌트인 방법으로 ./config 파일에 값 입력
퍼징/보안 서명 관련 설정 scripts/config --disable SYSTEMTRUSTEDKEYS scripts/config --disable SYSTEMREVOCATIONKEYS scripts/config --disable SYSTEMBLACKLISTKEYRING scripts/config --set-str SYSTEMBLACKLISTHASHLIST ""
KCOV (커버리지 수집) scripts/config --enable KCOV scripts/config --enable KCOVINSTRUMENTALL scripts/config --enable KCOVENABLECOMPARISONS
KASAN (Heap overflow 등 탐지) scripts/config --enable KASAN scripts/config --set-str KASANMODE "inline"
KMSAN (Uninitialized memory 탐지) scripts/config --enable KMSAN scripts/config --enable KMSANKCOV
UBSAN (Undefined behavior 탐지) scripts/config --enable UBSAN scripts/config --enable UBSANSANITIZEALL
Lockdep (Lock debugging) scripts/config --enable PROVELOCKING scripts/config --enable DEBUGLOCKALLOC scripts/config --enable LOCKDEP
Debug info (syzkaller용 커버리지 심볼 필요) scripts/config --enable DEBUGINFO scripts/config --enable DEBUGINFODWARFTOOLCHAINDEFAULT scripts/config --enable DEBUGKERNEL scripts/config --enable DEBUGFS scripts/config --enable GDBSCRIPTS
기타 빌드 관련 최적화 옵션 scripts/config --disable CONFIGDEBUGINFOREDUCED scripts/config --disable CONFIGLTOCLANG scripts/config --disable CONFIGSTACKVALIDATION scripts/config --enable CONFIGCONFIGFSFS
################################################# 선택사항 : 퍼징 대상 모듈 선택 scripts/config --module DRIVERSMISC scripts/config --module DRIVERSINPUT scripts/config --module DRIVERSNET scripts/config --module DRIVERSUSB scripts/config --module DRIVERSBLOCK scripts/config --module DRIVERSCHAR scripts/config --module FILESYSTEMS scripts/config --module NETFILTER #################################################
설정 반영 make olddefconfig
설정 반영까지 완료 후 빌드를 진행한다.
댓글