By Flavio De Stefano
이 튜토리얼은 맥(Mac)에서 바로 사용할 수 있도록 완전한 Kali Linux가 설치된 USB 드라이브를 만들고 싶은 모든 분들을 위한 가이드입니다. 참고로 이 글은 영속성(persistence) 기능이 있는 라이브(Live) Kali 환경 구축 방법이 아니라, 운영체제 전체를 USB에 설치하는 방법을 다룹니다.
USB에 Kali를 설치할 때 가장 큰 문제는 Kali 설치 프로그램이 디스크를 VFAT 파일 시스템으로 파티셔닝한다는 점입니다. 반면 맥 OS는 HFS+ 파티션과 그에 필요한 특정 파일들만 인식하죠.
따라서 시작하기 전에 다음 준비물이 필요합니다:
- 본인의 맥
- Kali ISO 설치 이미지가 담긴 USB
- Kali를 실제로 설치할 대상이 될 USB, SD 카드 또는 외장 SSD (16GB 이상, USB 3.0 권장)
이 튜토리얼은 Ubuntu용으로 작성된 기존 가이드(https://medium.com/@mmiglier/ubuntu-installation-on-usb-stick-with-pure-efi-boot-mac-compatible-469ad33645c9)에서 큰 영감을 받아, Kali 환경에 맞게 수정·보완한 내용입니다.
1단계: USB 라이브 설치 환경 만들기
먼저 아래 명령어로 USB에 Kali 라이브 설치 환경을 만듭니다. 세부 과정은 생략하겠습니다. 다음 명령어부터 시작하세요:
$ sudo dd if={KALI_ISO.iso} of=/dev/{USB} bs=1m
준비가 완료되면 맥을 재부팅합니다. 두 개의 USB를 모두 연결한 상태에서 ALT(Option) 키를 누르고, 부팅 메뉴에서 EFI boot를 선택해 라이브 설치 프로그램을 시작합니다.

Kali 설치 프로그램이 타임존(timezone)과 키보드 배치 등 몇 가지 질문을 합니다. 적절히 답하며 진행하세요.
디스크 파티션 단계에 도달하면 Manual(수동)을 선택합니다. 그다음 Kali를 설치할 대상(target) USB 드라이브를 선택합니다. 용량 등 여러 요소로 식별할 수 있으니 실수하지 않도록 주의하세요. Continue(계속)를 클릭하면 해당 드라이브가 파티셔닝됩니다.
같은 화면으로 돌아가면, 대상 USB 드라이브 아래의 FREE SPACE(빈 공간)를 선택하고 Continue를 누른 뒤 Automatically partition the free space(빈 공간 자동 파티션)를 고릅니다. 권장 옵션을 따라 진행한 후 Finish partitioning and write the change to disk(파티셔닝 마치고 변경 사항을 디스크에 쓰기)를 클릭합니다.
이제 설치 프로그램이 데이터를 디스크에 복사합니다. 완료까지 약 30분 정도 걸리니 기다려 주세요.
2단계: GRUB 라이브를 통해 부팅하기
설치가 끝나면 맥이 재부팅됩니다. 다시 ALT 키를 누르고 EFI boot를 선택하세요.
지금 해야 할 일은 라이브 GRUB을 통해 방금 설치한 Kali 시스템을 불러오는 것입니다. 맥 OS가 인식할 수 없는 부트로더이기 때문에, 설치된 시스템을 직접 부팅할 수 없기 때문입니다.
GRUB이 로드되면 c 키를 눌러 GRUB 명령줄 인터페이스(CLI)로 진입합니다.
이제 Kali가 어떤 하드디스크(hd)에 설치되었는지 확인해야 합니다. GRUB CLI에서 ls를 입력한 뒤, USB를 제거하고 다시 ls를 입력해 보세요.
grub> ls
(memdisk) (hd0) (hd1) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1) ...
목록에서 하나의 hd{X}가 사라졌다면, 그것이 바로 여러분의 드라이브입니다. 이제 해당 gpt를 찾아야 합니다. 아마도 gpt2일 가능성이 높지만, 확실히 하기 위해 다음을 입력해 확인하세요:
grub> ls (hdX,gpt2)/boot/grub
unicode.pf2 ...
unicode..가 출력되면 올바른 gpt입니다. 아니라면 다른 gpt를 차례로 시도해 보세요. 그다음 해당 파티션의 UUID를 찾아 기록해 둡니다.
grub> ls -l (hdX,gpt{X})
Partition hd2,gpt2: Filesystem type ext* (...snip...) UUID e86c20b9-83e1-447d-a3be-d1ddaad6c4c6 - Partition start at [...]
이제 GRUB에 부팅 매개변수를 설정합니다(Tab 키로 자동완성을 활용하세요):
grub> set root=(hd{X},gpt{X})
grub> linux /boot/vmlinuz〈여기서 Tab!〉.efi.signed root=UUID=〈위의 UUID〉
grub> initrd /boot/initrd〈여기서 Tab!〉
grub> boot
이제 라이브 GRUB을 통해 완전히 설치된 Kali가 부팅됩니다. 로그인 과정에서 인식되는 비밀번호로 라이브 환경과 설치된 환경을 구분할 수 있습니다.
3단계: EFI 파티션 수정하기
설치된 Kali에 로그인했다면 터미널을 열고 다음을 입력합니다:
$ fdisk -l
출력 결과에서 자신의 드라이브를 찾습니다.
이제 gdisk(Kali에 기본 설치되어 있음)를 열어 드라이브를 파티셔닝합니다. 이 단계는 매우 신중하게 진행해야 합니다:
$ gdisk /dev/sd{X}
GPT fdisk (gdisk) version 1.0.1
Partition table scan:
MBR: hybrid
BSD: not present
APM: not present
GPT: present
Found valid GPT with hybrid MBR; using GPT.
Command (? for help):
파티션 테이블을 출력(p)하여 첫 번째 파티션의 타입이 EF00인지 확인합니다:
Command (? for help): p
Disk /dev/sdd: ...
[...]
Number Start (sector) End (sector) Size Code Name
1 2048 1050623 512.0 MiB EF00 EFI System Partition
[...]
이제 할 일은 다음과 같습니다:
- EF00 타입의 해당 파티션을 삭제하고
- 같은 자리에 새로운 HFS+ 파티션을 생성하는 것
Command (? for help): d
Partition number (1-3): 1
Command (? for help): n
Partition number (1-128, default 1): 1
※ 섹터 단계에서는 기본값을 그대로 사용하세요
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): AF00
Changed type of partition to 'Apple HFS/HFS+'
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdd.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
이제 포맷되지 않은 HFS+ 파티션이 생겼습니다. 포맷하려면 별도의 도구가 필요한데, 이를 위해 apt에 Debian 소스 리스트를 추가해야 합니다:
$ echo "deb https://ftp.debian.org/debian unstable main contrib non-free" > /etc/apt/sources.list.d/debian.list
$ apt update
$ apt install hfsprogs
이제 파티션을 포맷할 수 있습니다:
$ mkfs.hfsplus /dev/sd{X}1 -v Kali
Initialized /dev/sd{X}1 as a 512 MB HFS Plus volume
다음으로 /etc/fstab 파일을 편집합니다:
$ gedit /etc/fstab
Gedit가 실행되면 파일에서 아래 두 줄을 찾아 삭제합니다:
# /boot/efi was on /dev/sd{X}1 during installation
UUID={XXXXXXX} /boot/efi vfat defaults 0 1
이제 부팅 파티션을 마운트 해제합니다. 먼저 위치를 확인하세요:
$ mount | grep /boot/efi
/dev/sd{Y}1 on /boot/efi ...
$ umount /dev/sd{Y}1
그다음 fstab 파일에 필요한 항목을 추가합니다:
$ echo "UUID=$(blkid -o value -s UUID /dev/sd{X}1) /boot/efi auto defaults 0 0" >> /etc/fstab
새로 포맷한 HFS+ 파티션에 EFI 데이터를 저장할 수 있도록 GRUB을 다시 설치합니다:
$ mkdir -p /boot/efi/EFI/Kali
$ echo "This file is required for booting" > /boot/efi/EFI/Kali/mach_kernel
$ echo "This file is required for booting" > /boot/efi/mach_kernel
$ grub-install --target x86_64-efi --boot-directory=/boot --efi-directory=/boot/efi --bootloader-id=Kali
마지막으로 부트로더 코드를 "bless(축복)" 처리해야 맥 부트로더가 이를 부팅할 수 있습니다. 이를 위해서는 apt로 설치할 수 없는 hfsbless 바이너리가 필요합니다. 문제없습니다. 저장소를 클론해서 직접 빌드하면 됩니다:
$ cd /root
$ git clone https://github.com/detly/mactel-boot
$ cd mactel-boot
$ make
이제 bless를 실행합니다:
./hfs-bless /boot/efi/EFI/Kali/System/Library/CoreServices/boot.efi
마지막 단계는 GRUB 설정 파일을 생성하는 것입니다:
$ sed -i 's/GRUB_HIDDEN/#GRUB_HIDDEN/g' /etc/default/grub
$ sed -i 's/GRUB_TIMEOUT=10/GRUB_TIMEOUT=0.1/' /etc/default/grub
$ grub-mkconfig -o /boot/grub/grub.cfg
완벽합니다! 이제 재부팅한 뒤 ALT 키를 누르면 맥 부트로더에서 USB 스틱이 정상적으로 나타날 것입니다.
4단계: VirtualBox로 USB 가상화하기
이 USB 스틱을 VirtualBox(맥 OS X 환경)에서 부팅해야 할 때가 있다면, 아주 간단한 트릭으로 해결할 수 있습니다.
먼저 USB 스틱의 섹터를 직접 가리키는 VMDK 디스크를 생성해야 합니다. 우선 해당 디스크를 식별하세요:
$ diskutil list
/dev/disk0 (internal):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme 500.3 GB disk0
1: EFI EFI 314.6 MB disk0s1
2: Apple_APFS Container disk1 499.3 GB disk0s2
/dev/disk1 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +499.3 GB disk1
Physical Store disk0s2
1: APFS Volume Macintosh HD 222.0 GB disk1s1
2: APFS Volume Preboot 22.4 MB disk1s2
3: APFS Volume Recovery 519.9 MB disk1s3
4: APFS Volume VM 3.2 GB disk1s4
/dev/disk3 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *32.0 GB disk3
이 예시에서는 /dev/disk3입니다. 진행하기 전에 먼저 언마운트합니다:
$ diskutil unmountDisk /dev/disk{X}
VirtualBox가 설치되어 있다면 다음을 실행합니다:
$ sudo VBoxManage internalcommands createrawvmdk -filename ~/Kali.vmdk -rawdisk /dev/disk{X}
$ chmod 777 ~/Kali.vmdk
$ chmod 777 /dev/disk{X}
준비 완료입니다. 이제 VirtualBox UI를 실행하고 다음 설정으로 새 가상 머신을 생성합니다:

VirtualBox가 디스크를 묻는 단계에서는 앞서 만든 VMDK 파일을 지정합니다:

가상 머신을 시작하기 전에 설정(Settings)으로 들어가 CPU 코어 수, 비디오, 메모리를 조정해 주세요. 가장 중요한 것은 System > Motherboard에서 Enable EFI를 활성화하는 것입니다.

이렇게 하면 EFI를 통해 부팅할 수 있습니다. 가상 머신을 시작하자마자 F12 키를 누르세요.
Boot Maintenance Manager를 선택합니다:

Boot from file을 선택합니다:

그다음 {SATA_DRIVE} > EFI > Kali > System > Library > CoreServices > boot.efi 순서로 선택합니다.

그리고 짜잔, 성공입니다:

참고로 무료로 코딩을 배우고 싶다면 freeCodeCamp의 오픈소스 커리큘럼이 4만 명 이상의 사람들이 개발자로 취업하는 데 도움을 주었습니다. 지금 바로 시작해 보세요.