Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
kali-rpi-luks-crypt — 라즈베리 파이에서 LUKS를 사용한 Kali 전체 디스크 암호화 | Kitploit
도구/GitHubGitHub/tothi/kali-rpi-luks-crypt
Embedded Systems SecurityEncryption/Decryption ToolsHardware & IoT SecurityLearning & EducationLabs & Practice
GitHubtothi/kali-rpi-luks-crypt

kali-rpi-luks-crypt

라즈베리 파이에서 LUKS를 사용한 Kali 전체 디스크 암호화

저장소 보기
15717년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

LUKS를 사용한 Raspberry(또는 유사 아키텍처)에서 Kali의 전체 디스크 암호화

이 HOWTO는 Raspberry(또는 유사 아키텍처, 예: ODROID-C2)에서 LUKS를 사용한 전체 디스크 암호화로 Kali를 실행하는 데 dedicated 됩니다. 약간 오래된 문서 여기를 기반으로 합니다.

동기

Raspberry Pi(또는 유사한 소형 저전력 하드웨어)에서 Kali를 LAN 환경에 "throw-away-hackbox"로 배포하는 것은 분명 유용합니다. 그러나 수집된 데이터를 비밀로 유지하는 것은 필수 요구 사항입니다. 여기에 필수 보안 개념으로 전체 디스크 암호화가 등장합니다.

전제 조건

먼저 공식 최신 Kali 이미지를 Raspberry Pi용으로 (암호화 없이) SD 카드에 설정해야 합니다.

(지금은) 권장 옵션은 nexmon 패치(내장 WiFi 모니터링 및 인젝션 기능 사용을 위해)가 적용된 Raspberry Pi 3 커스텀 빌드를 사용하는 것입니다. 공식 kali-arm-build-scripts 저장소에는 이미지를 처음부터 설정하는 자동 빌드 스크립트가 있습니다 (Kali 배포판에서). 그리고 Kali 이외의 다른 배포판에서도 작동하는 패치된 버전도 있습니다 (Gentoo에서 테스트됨). 현재(2017-08) ODROID-C2용 빌드 스크립트도 해당 포크된 저장소에 있습니다.

빌드 도구를 가져와서 루트로 이미지를 처음부터 빌드합니다 (몇 시간 소요될 수 있음):

root@kitploit:~
$ git clone https://github.com/tothi/kali-arm-build-scripts
$ cd kali-arm-build-scripts
$ sudo ./rpi3-nexmon.sh 2.0

결과 이미지는 rpi3-nexmon-2.0/kali-2.0-rpi3-nexmon.img.xz입니다. SD 카드에 복사합니다 (pv를 사용하여 진행 상황 표시):

root@kitploit:~
# pixz -d rpi3-nexmon-2.0/kali-2.0-rpi3-nexmon.img.xz - | pv -treb | dd of=/dev/mmcblk0 bs=512k

(이미지는 작동해야 하며, 지금 테스트할 수 있습니다.)

암호화된 부팅을 위한 RPi 이미지 준비

SD 카드에서 이미지를 마운트하고 chroot 환경에서 LUKS 기능이 있는 initramfs를 준비합니다. 이를 작동시키기 위해서는 SD 카드 파일 시스템에 x86 (호스트) qemu-arm-static 바이너리가 필요합니다. 위의 패치된 rpi3-nexmon.sh 빌드 스크립트는 이를 이미지에 설치하고 남겨두므로 잘 작동해야 합니다. (그렇지 않으면 적절한 qemu 정적 바이너리를 이미지에 복사해야 합니다.)

chroot 환경 초기화 (호스트 시스템에서 루트로):

root@kitploit:~
# mkdir -p /mnt/chroot/boot
# mount /dev/mmcblk0p2 /mnt/chroot/
# mount /dev/mmcblk0p1 /mnt/chroot/boot/

# mount -t proc none /mnt/chroot/proc
# mount -t sysfs none /mnt/chroot/sys
# mount -o bind /dev /mnt/chroot/dev
# mount -o bind /dev/pts /mnt/chroot/dev/pts

# LANG=C chroot /mnt/chroot/

먼저 root의 기본 비밀번호를 변경합니다:

root@kitploit:~
passwd

필요한 패키지 설치 (chroot 환경 내):

root@kitploit:~
# apt-get update
# apt-get install busybox cryptsetup dropbear

참고: 부팅할 때마다 암호 해독 키를 입력해야 합니다. SSH를 통해 원격으로 입력하는 것이 바람직하므로 dropbear가 필요합니다 (initramfs 내).

이제 /boot/cmdline.txt를 편집하고 root 장치를 매핑된 crypt 장치(/dev/mapper/crypt_sdcard)로 변경하고 적절한 cryptdevice 매개변수를 추가합니다.

원본 /boot/cmdline.txt는 다음과 같습니다:

root@kitploit:~
dwc_otg.fiq_fix_enable=2 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rootflags=noload net.ifnames=0

업데이트된 버전은 다음과 같습니다 (root 및 cryptdevice 매개변수 차이):

root@kitploit:~
dwc_otg.fiq_fix_enable=2 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mapper/crypt_sdcard cryptdevice=/dev/mmcblk0p2:crypt_sdcard rootfstype=ext4 rootwait rootflags=noload net.ifnames=0

이제 다음 내용으로 /boot/config.txt를 생성합니다:

root@kitploit:~
initramfs initramfs.gz followkernel

참고: 다른 하드웨어에서도 유사한 단계가 필요합니다 (ODROID-C2에서 부팅 매개변수가 포함된 파일은 /boot/boot.ini입니다).

Dropbear SSH 키 인증을 설정합니다. 호스트 머신(chroot 외부!)에서 (비밀번호 없는) 키 쌍을 생성하고 공개 키를 읽습니다:

root@kitploit:~
$ ssh-keygen -N "" -f kali-dropbear
$ cat ./kali-dropbear.pub

공개 키를 /etc/dropbear-initramfs/authorized_keys에 추가합니다. cryptroot 설정만을 위해 Dropbear SSH 접근을 제한하려면 키 앞에 다음을 추가합니다:

root@kitploit:~
command="/scripts/local-top/cryptroot && kill -9 `ps | grep -m 1 'cryptroot' | cut -d ' ' -f 3`"

권한 수정:

root@kitploit:~
chmod 600 /etc/dropbear-initramfs/authorized_keys

/etc/fstab을 편집합니다. 원본:

root@kitploit:~
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1

업데이트된 / 장치가 /dev/mapper/crypt_sdcard로 변경됨:

root@kitploit:~
# <file system>           <mount point>   <type>  <options>       <dump>  <pass>
proc                      /proc           proc    defaults          0       0
/dev/mmcblk0p1            /boot           vfat    defaults          0       2
/dev/mapper/crypt_sdcard  /               ext4    defaults,noatime  0       1

/etc/crypttab에 다음 줄을 추가합니다:

root@kitploit:~
crypt_sdcard /dev/mmcblk0p2 none luks

/etc/cryptsetup-initramfs/conf-hook을 수정하여 다음을 설정합니다:

root@kitploit:~
CRYPTSETUP=y

initramfs 이미지에 cryptsetup 파일을 포함시킵니다.

마지막으로 현재 커널 버전에 대한 initramfs를 만들고 chroot를 종료합니다 (mkinitramfs 중 오류/경고는 신경 쓰지 마세요):

root@kitploit:~
# ls -l /lib/modules/ |awk -F" " '{print $9}'

4.4.50-v7+
# mkinitramfs -o /boot/initramfs.gz 4.4.50-v7+

참고: 이미지를 생성할 때 (특히 다른 하드웨어에서) 주의해야 합니다. uname -r은 chroot 내 커널 버전이 아닌 호스트 커널 버전을 반환하기 때문입니다. 예를 들어 ODROID-C2에서 /boot/mkuinitrd는 바로 작동하지 않으므로 스크립트의 명령을 수동으로 실행해야 합니다 (다른 하드웨어의 경우 커널 버전을 조정!):

root@kitploit:~
# rm /boot/initrd.img-3.14.79
# update-initramfs -c -k 3.14.79
# mkimage -A arm64 -O linux -T ramdisk -C none -a 0 -e 0 -n "uInitrd" -d /boot/initrd.img-3.14.79 /boot/uInitrd
#

chroot 환경 종료

root@kitploit:~
exit

암호화된 볼륨을 생성하기 전에 파일 시스템을 마운트 해제하고 rootfs를 백업합니다 (SD 카드에서 모든 것을 삭제):

root@kitploit:~
# umount /mnt/chroot/boot
# umount /mnt/chroot/sys
# umount /mnt/chroot/proc
# mkdir -p /mnt/backup
# rsync -avh /mnt/chroot/* /mnt/backup/

전체 chroot 마운트 해제:

root@kitploit:~
# umount /mnt/chroot/dev/pts
# umount /mnt/chroot/dev
# umount /mnt/chroot

암호화되지 않은 루트 파티션 (2번)을 삭제하고 빈 파티션을 생성합니다 (SD 카드 전체를 채움):

root@kitploit:~
# echo -e "d\n2\nw" | fdisk /dev/mmcblk0
# echo -e "n\np\n2\n\n\nw" | fdisk /dev/mmcblk0

이제 (아마도) SD 카드를 뽑았다가 다시 삽입하여 새 파티션을 등록해야 합니다.

강력한 암호로 암호화된 볼륨을 생성합니다 (이 단계는 원래 rootfs를 파괴합니다!):

root@kitploit:~
# cryptsetup -v -y --cipher aes-cbc-essiv:sha256 --key-size 256 luksFormat /dev/mmcblk0p2
# cryptsetup -v luksOpen /dev/mmcblk0p2 crypt_sdcard
# mkfs.ext4 /dev/mapper/crypt_sdcard

암호화된 볼륨에 rootfs를 복원하고 디스크를 닫습니다:

root@kitploit:~
# mkdir -p /mnt/encrypted
# mount /dev/mapper/crypt_sdcard /mnt/encrypted/
# rsync -avh /mnt/backup/* /mnt/encrypted/
# umount /mnt/encrypted/
# cryptsetup luksClose /dev/mapper/crypt_sdcard
# sync

SD 카드를 제거하고 Raspberry에서 테스트합니다.

장치 부팅

첫 번째 부팅 프로세스는 실패하고 busybox로 대체됩니다. 다음 명령을 입력합니다:

root@kitploit:~
# cryptsetup luksOpen /dev/mmcblk0p2 crypt_sdcard
## 비밀번호 입력
# exit

이제 장치가 부팅되어야 합니다. 이전에 선택한 비밀번호로 로그인하고 다음을 실행합니다:

root@kitploit:~
mkinitramfs -o /boot/initramfs.gz
reboot

이제 더 나은 프롬프트와 함께 암호를 묻는 메시지가 표시됩니다. 또한 busybox에 SSH로 접속하여 암호를 입력할 수 있습니다 (원하는 경우 사용자 정의 known_hosts 파일을 사용할 수 있음):

root@kitploit:~
$ ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" -i ~/.ssh/kali-dropbear [email protected]

작동하면 호스트에서 백업 파일을 정리하는 것을 잊지 마세요:

root@kitploit:~
# rm -fr /mnt/backup
# rm -fr /mnt/chroot

문제 해결

부팅 중 전체 디버그 출력을 보려면 cmdline.txt에 debug=1을 추가할 수 있습니다.

도구 다운로드