๋ถ€ํŠธ๋กœ๋” ํ…Œ์ŠคํŠธ

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 ์ง€์›ํ•˜๊ธฐ

๋‹ค์Œ ๋‹จ๊ณ„๋“ค์€ U-Boot, UEFI-class loader ๊ฐ™์€ ๋ถ€ํŠธ๋กœ๋”๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žฅ์น˜์˜ ์‹œ์ž‘ ๊ตฌ์„ฑ์„ ์ˆ˜์ •ํ•  ๋•Œ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์ฝ”๋“œ ์‹คํ–‰ ํ™•๋ณด, ์„œ๋ช…/๋กค๋ฐฑ ๋ณดํ˜ธ ํ‰๊ฐ€, ๋ณต๊ตฌ ๋˜๋Š” ๋„คํŠธ์›Œํฌ ๋ถ€ํŒ… ๊ฒฝ๋กœ ์•…์šฉ์— ์ค‘์ ์„ ๋‘์„ธ์š”.

Related: MediaTek secure-boot bypass via bl2_ext patching:

Android Mediatek Secure Boot Bl2 Ext Bypass El3

U-Boot ๋น ๋ฅธ ๋ฐฉ๋ฒ• ๋ฐ ํ™˜๊ฒฝ ๋‚จ์šฉ

  1. ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์…ธ์— ์ ‘๊ทผ
  • ๋ถ€ํŒ… ์ค‘ bootcmd๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— (๋Œ€๊ฐœ ์•„๋ฌด ํ‚ค, 0, ์ŠคํŽ˜์ด์Šค ๋˜๋Š” ๋ณด๋“œ๋ณ„ โ€œ๋งค์งโ€ ์‹œํ€€์Šค) ์•Œ๋ ค์ง„ ์ค‘๋‹จ ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ U-Boot ํ”„๋กฌํ”„ํŠธ๋กœ ์ง„์ž…ํ•ฉ๋‹ˆ๋‹ค.
  1. ๋ถ€ํŠธ ์ƒํƒœ ๋ฐ ๋ณ€์ˆ˜ ํ™•์ธ
  • ์œ ์šฉํ•œ ๋ช…๋ น:
  • printenv (ํ™˜๊ฒฝ ๋คํ”„)
  • bdinfo (๋ณด๋“œ ์ •๋ณด, ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ)
  • help bootm; help booti; help bootz (์ง€์›๋˜๋Š” ์ปค๋„ ๋ถ€ํŒ… ๋ฐฉ๋ฒ•)
  • help ext4load; help fatload; help tftpboot (์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋กœ๋”)
  1. ๋ฃจํŠธ ์…ธ์„ ์–ป๊ธฐ ์œ„ํ•œ ๋ถ€ํŠธ ์ธ์ž ์ˆ˜์ •
  • ์ปค๋„์ด ์ •์ƒ init ๋Œ€์‹  ์…ธ๋กœ ๋น ์ง€๊ฒŒ init=/bin/sh๋ฅผ ์ถ”๊ฐ€:
# printenv
# setenv bootargs 'console=ttyS0,115200 root=/dev/mtdblock3 rootfstype=<fstype> init=/bin/sh'
# saveenv
# boot    # or: run bootcmd
  1. 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}
  1. ํ™˜๊ฒฝ์„ ํ†ตํ•ด ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ง€์†ํ™”
  • env ์ €์žฅ์†Œ๊ฐ€ ์“ฐ๊ธฐ ๋ณดํ˜ธ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์ œ์–ด๋ฅผ ์ง€์†์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
# setenv bootcmd 'tftpboot ${loadaddr} fit.itb; bootm ${loadaddr}'
# saveenv
  • bootcount, bootlimit, altbootcmd, boot_targets ๊ฐ™์€ ๋ณ€์ˆ˜๋“ค์ด ํด๋ฐฑ ๊ฒฝ๋กœ์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ๊ฐ’์€ ์…ธ๋กœ ๋ฐ˜๋ณต ์ง„์ž…์„ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. ๋””๋ฒ„๊ทธ/์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ ํ™•์ธ
  • ํ™•์ธํ•  ํ•ญ๋ชฉ: bootdelay > 0, autoboot ๋น„ํ™œ์„ฑํ™”, ์ œํ•œ ์—†๋Š” usb start; fatload usb 0:1 ..., ์ง๋ ฌ์„ ํ†ตํ•œ loady/loads ๊ฐ€๋Šฅ์„ฑ, ์‹ ๋ขฐ๋˜์ง€ ์•Š์€ ๋งค์ฒด๋กœ๋ถ€ํ„ฐ์˜ env import, ์„œ๋ช… ๊ฒ€์‚ฌ ์—†์ด ๋กœ๋“œ๋˜๋Š” ์ปค๋„/ramdisk ๋“ฑ.
  1. 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) ๋ฐ ์•…์„ฑ ์„œ๋ฒ„

  1. 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 ์ธก ํ”„๋กœ๋น„์ €๋‹ ์Šคํฌ๋ฆฝํŠธ๋กœ ์—ฐ๊ฒฐ๋  ๋•Œ ์…ธ/๋กœ๋” ๋กœ์ง์— ์ •์ œ ์—†์ด ์ „๋‹ฌ๋˜๋Š”์ง€๋„ ๊ฒ€์ฆํ•˜์„ธ์š”.
  1. ์•…์„ฑ 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) or imx-usb-loader.
  • Example: imx-usb-loader u-boot.imx to push and run a custom U-Boot from RAM.
  • Allwinner (FEL)
  • Tool: sunxi-fel.
  • Example: sunxi-fel -v uboot u-boot-sunxi-with-spl.bin or sunxi-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.bin to stage a loader and upload a custom U-Boot.

์žฅ์น˜์— secure-boot eFuses/OTP๊ฐ€ ํƒœ์›Œ์ ธ ์žˆ๋Š”์ง€ ํ‰๊ฐ€ํ•˜์„ธ์š”. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด BootROM ๋‹ค์šด๋กœ๋“œ ๋ชจ๋“œ๋Š” ์ƒ์œ„ ๋ ˆ๋ฒจ์˜ ๊ฒ€์ฆ(U-Boot, kernel, rootfs)์„ ์šฐํšŒํ•˜๊ณ  ์ฒซ ๋ฒˆ์งธ ์Šคํ…Œ์ด์ง€ ํŽ˜์ด๋กœ๋“œ๋ฅผ SRAM/DRAM์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

UEFI/PC-class ๋ถ€ํŠธ๋กœ๋”: ๋น ๋ฅธ ๊ฒ€์‚ฌ

  1. 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๋ฅผ ๋กœ๋“œํ•ด ์˜๊ตฌ์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. ๋ถ€ํŠธ ๋กœ๊ณ  ํŒŒ์‹ฑ ๋ฒ„๊ทธ(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

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 ์ง€์›ํ•˜๊ธฐ