AppArmor

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 μ§€μ›ν•˜κΈ°

κΈ°λ³Έ 정보

AppArmorλŠ” ν”„λ‘œκ·Έλž¨λ³„ ν”„λ‘œν•„μ„ 톡해 ν”„λ‘œκ·Έλž¨μ— μ‚¬μš©ν•  수 μžˆλŠ” λ¦¬μ†ŒμŠ€λ₯Ό μ œν•œν•˜λ„λ‘ μ„€κ³„λœ 컀널 ν–₯상 κΈ°λŠ₯으둜, μ ‘κ·Ό μ œμ–΄ 속성을 μ‚¬μš©μž λŒ€μ‹  ν”„λ‘œκ·Έλž¨μ— 직접 μ—°κ²°ν•˜μ—¬ κ°•μ œ μ ‘κ·Ό μ œμ–΄(MAC)λ₯Ό 효과적으둜 κ΅¬ν˜„ν•©λ‹ˆλ‹€. 이 μ‹œμŠ€ν…œμ€ λΆ€νŒ… 쀑에 ν”„λ‘œν•„μ„ 컀널에 λ‘œλ“œν•˜μ—¬ μž‘λ™ν•˜λ©°, μ΄λŸ¬ν•œ ν”„λ‘œν•„μ€ ν”„λ‘œκ·Έλž¨μ΄ μ ‘κ·Όν•  수 μžˆλŠ” λ¦¬μ†ŒμŠ€(예: λ„€νŠΈμ›Œν¬ μ—°κ²°, μ›μ‹œ μ†ŒμΌ“ μ ‘κ·Ό 및 파일 κΆŒν•œ)λ₯Ό κ·œμ •ν•©λ‹ˆλ‹€.

AppArmor ν”„λ‘œν•„μ—λŠ” 두 κ°€μ§€ 운영 λͺ¨λ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€:

  • κ°•μ œ λͺ¨λ“œ: 이 λͺ¨λ“œλŠ” ν”„λ‘œν•„ λ‚΄μ—μ„œ μ •μ˜λœ 정책을 적극적으둜 μ‹œν–‰ν•˜λ©°, μ΄λŸ¬ν•œ 정책을 μœ„λ°˜ν•˜λŠ” 행동을 μ°¨λ‹¨ν•˜κ³  syslog λ˜λŠ” auditd와 같은 μ‹œμŠ€ν…œμ„ 톡해 μœ„λ°˜ μ‹œλ„λ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€.
  • 뢈만 λͺ¨λ“œ: κ°•μ œ λͺ¨λ“œμ™€ 달리 뢈만 λͺ¨λ“œλŠ” ν”„λ‘œν•„μ˜ 정책에 λ°˜ν•˜λŠ” 행동을 μ°¨λ‹¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹ , μ΄λŸ¬ν•œ μ‹œλ„λ₯Ό μ •μ±… μœ„λ°˜μœΌλ‘œ κΈ°λ‘ν•˜λ˜ μ œν•œμ„ μ‹œν–‰ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

AppArmor의 ꡬ성 μš”μ†Œ

  • 컀널 λͺ¨λ“ˆ: μ •μ±… μ‹œν–‰μ„ λ‹΄λ‹Ήν•©λ‹ˆλ‹€.
  • μ •μ±…: ν”„λ‘œκ·Έλž¨ λ™μž‘ 및 λ¦¬μ†ŒμŠ€ 접근에 λŒ€ν•œ κ·œμΉ™κ³Ό μ œν•œμ„ μ§€μ •ν•©λ‹ˆλ‹€.
  • νŒŒμ„œ: 정책을 컀널에 λ‘œλ“œν•˜μ—¬ μ‹œν–‰ λ˜λŠ” λ³΄κ³ ν•©λ‹ˆλ‹€.
  • μœ ν‹Έλ¦¬ν‹°: AppArmor와 μƒν˜Έμž‘μš©ν•˜κ³  κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” μ‚¬μš©μž λͺ¨λ“œ ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€.

ν”„λ‘œν•„ 경둜

AppArmor ν”„λ‘œν•„μ€ 일반적으둜 _/etc/apparmor.d/_에 μ €μž₯λ©λ‹ˆλ‹€.
sudo aa-statusλ₯Ό μ‚¬μš©ν•˜λ©΄ 일뢀 ν”„λ‘œν•„μ— μ˜ν•΄ μ œν•œλœ λ°”μ΄λ„ˆλ¦¬λ₯Ό λ‚˜μ—΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜μ—΄λœ 각 λ°”μ΄λ„ˆλ¦¬μ˜ κ²½λ‘œμ—μ„œ 문자 β€œ/β€œλ₯Ό 점으둜 λ³€κ²½ν•˜λ©΄ μ–ΈκΈ‰λœ 폴더 λ‚΄μ˜ AppArmor ν”„λ‘œν•„ 이름을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, _/usr/bin/man_에 λŒ€ν•œ AppArmor ν”„λ‘œν•„μ€ _/etc/apparmor.d/usr.bin.man_에 μœ„μΉ˜ν•©λ‹ˆλ‹€.

λͺ…λ Ήμ–΄

aa-status     #check the current status
aa-enforce    #set profile to enforce mode (from disable or complain)
aa-complain   #set profile to complain mode (from diable or enforcement)
apparmor_parser #to load/reload an altered policy
aa-genprof    #generate a new profile
aa-logprof    #used to change the policy when the binary/program is changed
aa-mergeprof  #used to merge the policies

ν”„λ‘œν•„ 생성

  • 영ν–₯을 λ°›λŠ” μ‹€ν–‰ νŒŒμΌμ„ λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ μ ˆλŒ€ κ²½λ‘œμ™€ μ™€μΌλ“œμΉ΄λ“œκ°€ νŒŒμΌμ„ μ§€μ •ν•˜λŠ” 데 ν—ˆμš©λ©λ‹ˆλ‹€.
  • λ°”μ΄λ„ˆλ¦¬κ°€ νŒŒμΌμ— λŒ€ν•΄ κ°€μ§ˆ 접근을 λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ λ‹€μŒ μ ‘κ·Ό μ œμ–΄λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:
  • r (읽기)
  • w (μ“°κΈ°)
  • m (μ‹€ν–‰ κ°€λŠ₯ν•œ λ©”λͺ¨λ¦¬ λ§΅)
  • k (파일 잠금)
  • l (ν•˜λ“œ 링크 생성)
  • ix (μƒˆ ν”„λ‘œκ·Έλž¨μ΄ 정책을 상속받아 λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰)
  • Px (ν™˜κ²½μ„ μ •λ¦¬ν•œ ν›„ λ‹€λ₯Έ ν”„λ‘œν•„μ—μ„œ μ‹€ν–‰)
  • Cx (ν™˜κ²½μ„ μ •λ¦¬ν•œ ν›„ μžμ‹ ν”„λ‘œν•„μ—μ„œ μ‹€ν–‰)
  • Ux (ν™˜κ²½μ„ μ •λ¦¬ν•œ ν›„ μ œν•œ 없이 μ‹€ν–‰)
  • λ³€μˆ˜λŠ” ν”„λ‘œν•„μ—μ„œ μ •μ˜ν•  수 있으며 ν”„λ‘œν•„ μ™ΈλΆ€μ—μ„œ μ‘°μž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예: @{PROC} 및 @{HOME} (ν”„λ‘œν•„ νŒŒμΌμ— #include <tunables/global> μΆ”κ°€)
  • ν—ˆμš© κ·œμΉ™μ„ λ¬΄μ‹œν•˜κΈ° μœ„ν•΄ κ±°λΆ€ κ·œμΉ™μ΄ μ§€μ›λ©λ‹ˆλ‹€.

aa-genprof

ν”„λ‘œν•„ 생성을 μ‰½κ²Œ μ‹œμž‘ν•˜κΈ° μœ„ν•΄ apparmorκ°€ 도움을 쀄 수 μžˆμŠ΅λ‹ˆλ‹€. apparmorκ°€ λ°”μ΄λ„ˆλ¦¬μ— μ˜ν•΄ μˆ˜ν–‰λœ μž‘μ—…μ„ κ²€μ‚¬ν•˜κ³  μ–΄λ–€ μž‘μ—…μ„ ν—ˆμš©ν•˜κ±°λ‚˜ κ±°λΆ€ν• μ§€ κ²°μ •ν•  수 있게 ν•΄μ€λ‹ˆλ‹€.
단지 λ‹€μŒμ„ μ‹€ν–‰ν•˜λ©΄ λ©λ‹ˆλ‹€:

sudo aa-genprof /path/to/binary

그런 λ‹€μŒ, λ‹€λ₯Έ μ½˜μ†”μ—μ„œ λ°”μ΄λ„ˆλ¦¬κ°€ 일반적으둜 μˆ˜ν–‰ν•  λͺ¨λ“  μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€:

/path/to/binary -a dosomething

그런 λ‹€μŒ 첫 번째 μ½˜μ†”μ—μ„œ β€œsβ€œλ₯Ό λˆ„λ₯΄κ³  기둝된 μž‘μ—…μ—μ„œ λ¬΄μ‹œ, ν—ˆμš© λ˜λŠ” 기타λ₯Ό μ„ νƒν•©λ‹ˆλ‹€. μ™„λ£Œλ˜λ©΄ β€œfβ€œλ₯Ό 눌러 μƒˆ ν”„λ‘œν•„μ΄ _/etc/apparmor.d/path.to.binary_에 μƒμ„±λ©λ‹ˆλ‹€.

Note

ν™”μ‚΄ν‘œ ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ ν—ˆμš©/κ±°λΆ€/기타λ₯Ό 선택할 수 μžˆμŠ΅λ‹ˆλ‹€.

aa-easyprof

이진 파일의 apparmor ν”„λ‘œν•„ ν…œν”Œλ¦Ώμ„ λ‹€μŒκ³Ό 같이 생성할 수 μžˆμŠ΅λ‹ˆλ‹€:

sudo aa-easyprof /path/to/binary
# vim:syntax=apparmor
# AppArmor policy for binary
# ###AUTHOR###
# ###COPYRIGHT###
# ###COMMENT###

#include <tunables/global>

# No template variables specified

"/path/to/binary" {
#include <abstractions/base>

# No abstractions specified

# No policy groups specified

# No read paths specified

# No write paths specified
}

Note

기본적으둜 μƒμ„±λœ ν”„λ‘œν•„μ—μ„œλŠ” 아무것도 ν—ˆμš©λ˜μ§€ μ•ŠμœΌλ―€λ‘œ λͺ¨λ“  것이 κ±°λΆ€λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 이진 파일이 /etc/passwdλ₯Ό 읽을 수 μžˆλ„λ‘ /etc/passwd r,와 같은 쀄을 μΆ”κ°€ν•΄μ•Ό ν•©λ‹ˆλ‹€.

그런 λ‹€μŒ enforce μƒˆ ν”„λ‘œν•„μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

sudo apparmor_parser -a /etc/apparmor.d/path.to.binary

λ‘œκ·Έμ—μ„œ ν”„λ‘œν•„ μˆ˜μ •

λ‹€μŒ λ„κ΅¬λŠ” 둜그λ₯Ό 읽고 μ‚¬μš©μžκ°€ κ°μ§€λœ κΈˆμ§€λœ 행동 쀑 일뢀λ₯Ό ν—ˆμš©ν•  것인지 λ¬Όμ–΄λ΄…λ‹ˆλ‹€:

sudo aa-logprof

Note

ν™”μ‚΄ν‘œ ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ ν—ˆμš©/κ±°λΆ€/기타 μ›ν•˜λŠ” ν•­λͺ©μ„ 선택할 수 μžˆμŠ΅λ‹ˆλ‹€.

ν”„λ‘œν•„ 관리

#Main profile management commands
apparmor_parser -a /etc/apparmor.d/profile.name #Load a new profile in enforce mode
apparmor_parser -C /etc/apparmor.d/profile.name #Load a new profile in complain mode
apparmor_parser -r /etc/apparmor.d/profile.name #Replace existing profile
apparmor_parser -R /etc/apparmor.d/profile.name #Remove profile

Logs

Example of AUDIT and DENIED logs from /var/log/audit/audit.log of the executable service_bin:

type=AVC msg=audit(1610061880.392:286): apparmor="AUDIT" operation="getattr" profile="/bin/rcat" name="/dev/pts/1" pid=954 comm="service_bin" requested_mask="r" fsuid=1000 ouid=1000
type=AVC msg=audit(1610061880.392:287): apparmor="DENIED" operation="open" profile="/bin/rcat" name="/etc/hosts" pid=954 comm="service_bin" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0

이 정보λ₯Ό λ‹€μŒμ„ μ‚¬μš©ν•˜μ—¬ 얻을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€:

sudo aa-notify -s 1 -v
Profile: /bin/service_bin
Operation: open
Name: /etc/passwd
Denied: r
Logfile: /var/log/audit/audit.log

Profile: /bin/service_bin
Operation: open
Name: /etc/hosts
Denied: r
Logfile: /var/log/audit/audit.log

AppArmor denials: 2 (since Wed Jan  6 23:51:08 2021)
For more information, please see: https://wiki.ubuntu.com/DebuggingApparmor

Docker의 Apparmor

docker의 ν”„λ‘œνŒŒμΌ docker-profile이 기본적으둜 λ‘œλ“œλ˜λŠ” 방식을 μ£Όλͺ©ν•˜μ„Έμš”:

sudo aa-status
apparmor module is loaded.
50 profiles are loaded.
13 profiles are in enforce mode.
/sbin/dhclient
/usr/bin/lxc-start
/usr/lib/NetworkManager/nm-dhcp-client.action
/usr/lib/NetworkManager/nm-dhcp-helper
/usr/lib/chromium-browser/chromium-browser//browser_java
/usr/lib/chromium-browser/chromium-browser//browser_openjdk
/usr/lib/chromium-browser/chromium-browser//sanitized_helper
/usr/lib/connman/scripts/dhclient-script
docker-default

기본적으둜 Apparmor docker-default ν”„λ‘œν•„μ€ https://github.com/moby/moby/tree/master/profiles/apparmorμ—μ„œ μƒμ„±λ©λ‹ˆλ‹€.

docker-default ν”„λ‘œν•„ μš”μ•½:

  • λͺ¨λ“  λ„€νŠΈμ›Œν‚Ήμ— λŒ€ν•œ μ ‘κ·Ό
  • λŠ₯λ ₯이 μ •μ˜λ˜μ–΄ μžˆμ§€ μ•ŠμŒ (κ·ΈλŸ¬λ‚˜ 일뢀 λŠ₯λ ₯은 κΈ°λ³Έ κΈ°λ³Έ κ·œμΉ™μ„ ν¬ν•¨ν•˜μ—¬ 올 수 있음, 즉 #include <abstractions/base>)
  • /proc νŒŒμΌμ— λŒ€ν•œ μ“°κΈ°λŠ” ν—ˆμš©λ˜μ§€ μ•ŠμŒ
  • /proc 및 /sys의 λ‹€λ₯Έ ν•˜μœ„ 디렉토리/νŒŒμΌμ— λŒ€ν•œ 읽기/μ“°κΈ°/잠금/링크/μ‹€ν–‰ 접근이 거뢀됨
  • λ§ˆμš΄νŠΈλŠ” ν—ˆμš©λ˜μ§€ μ•ŠμŒ
  • PtraceλŠ” 같은 apparmor ν”„λ‘œν•„μ— μ˜ν•΄ μ œν•œλœ ν”„λ‘œμ„ΈμŠ€μ—μ„œλ§Œ μ‹€ν–‰ν•  수 있음

docker μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒ 좜λ ₯을 λ³Ό 수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€:

1 processes are in enforce mode.
docker-default (825)

apparmorλŠ” 기본적으둜 μ»¨ν…Œμ΄λ„ˆμ— λΆ€μ—¬λœ κΆŒν•œμ„ μ°¨λ‹¨ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 기본적으둜 docker apparmor ν”„λ‘œν•„μ΄ 이 접근을 κ±°λΆ€ν•˜κΈ° λ•Œλ¬Έμ— SYS_ADMIN κΆŒν•œμ΄ λΆ€μ—¬λ˜λ”λΌλ„ /proc 내뢀에 μ“°κΈ° κΆŒν•œμ„ 차단할 수 μžˆμŠ΅λ‹ˆλ‹€:

docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined ubuntu /bin/bash
echo "" > /proc/stat
sh: 1: cannot create /proc/stat: Permission denied

You need to disable apparmor to bypass its restrictions:
apparmor의 μ œν•œμ„ μš°νšŒν•˜λ €λ©΄ λΉ„ν™œμ„±ν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€:

docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined --security-opt apparmor=unconfined ubuntu /bin/bash

기본적으둜 AppArmorλŠ” μ»¨ν…Œμ΄λ„ˆκ°€ λ‚΄λΆ€μ—μ„œ 폴더λ₯Ό λ§ˆμš΄νŠΈν•˜λŠ” 것을 κΈˆμ§€ν•©λ‹ˆλ‹€, 심지어 SYS_ADMIN κΆŒν•œμ΄ μžˆμ–΄λ„ κ·Έλ ‡μŠ΅λ‹ˆλ‹€.

μ»¨ν…Œμ΄λ„ˆμ— κΆŒν•œμ„ μΆ”κ°€/μ œκ±°ν•  수 μžˆμ§€λ§Œ (μ—¬μ „νžˆ AppArmor 및 Seccomp와 같은 보호 방법에 μ˜ν•΄ μ œν•œλ©λ‹ˆλ‹€):

  • --cap-add=SYS_ADMIN SYS_ADMIN κΆŒν•œ λΆ€μ—¬
  • --cap-add=ALL λͺ¨λ“  κΆŒν•œ λΆ€μ—¬
  • --cap-drop=ALL --cap-add=SYS_PTRACE λͺ¨λ“  κΆŒν•œ μ œκ±°ν•˜κ³  SYS_PTRACE만 λΆ€μ—¬

Note

일반적으둜 docker μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—μ„œ 특ꢌ κΆŒν•œμ΄ μžˆμ§€λ§Œ μ΅μŠ€ν”Œλ‘œμž‡μ˜ 일뢀가 μž‘λ™ν•˜μ§€ μ•ŠλŠ” 경우, μ΄λŠ” docker apparmorκ°€ 이λ₯Ό λ°©μ§€ν•˜κ³  있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

μ˜ˆμ‹œ

(μ˜ˆμ‹œλŠ” μ—¬κΈ°μ—μ„œ κ°€μ Έμ˜΄)

AppArmor κΈ°λŠ₯을 μ„€λͺ…ν•˜κΈ° μœ„ν•΄, λ‹€μŒκ³Ό 같은 쀄을 μΆ”κ°€ν•˜μ—¬ μƒˆλ‘œμš΄ Docker ν”„λ‘œν•„ β€œmydocker”λ₯Ό μƒμ„±ν–ˆμŠ΅λ‹ˆλ‹€:

deny /etc/* w,   # deny write for all files directly in /etc (not in a subdir)

ν”„λ‘œν•„μ„ ν™œμ„±ν™”ν•˜λ €λ©΄ λ‹€μŒμ„ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€:

sudo apparmor_parser -r -W mydocker

ν”„λ‘œν•„μ„ λ‚˜μ—΄ν•˜λ €λ©΄ λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜ λͺ…령은 λ‚΄ μƒˆλ‘œμš΄ AppArmor ν”„λ‘œν•„μ„ λ‚˜μ—΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

$ sudo apparmor_status  | grep mydocker
mydocker

μ•„λž˜μ™€ 같이, AppArmor ν”„λ‘œνŒŒμΌμ΄ β€œ/etc”에 λŒ€ν•œ μ“°κΈ° 접근을 λ°©μ§€ν•˜κ³  있기 λ•Œλ¬Έμ— β€œ/etc/”λ₯Ό λ³€κ²½ν•˜λ €κ³  ν•  λ•Œ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

$ docker run --rm -it --security-opt apparmor:mydocker -v ~/haproxy:/localhost busybox chmod 400 /etc/hostname
chmod: /etc/hostname: Permission denied

AppArmor Docker Bypass1

μ–΄λ–€ apparmor ν”„λ‘œνŒŒμΌμ΄ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜κ³  μžˆλŠ”μ§€ ν™•μΈν•˜λ €λ©΄ λ‹€μŒμ„ μ‚¬μš©ν•˜μ„Έμš”:

docker inspect 9d622d73a614 | grep lowpriv
"AppArmorProfile": "lowpriv",
"apparmor=lowpriv"

그런 λ‹€μŒ, λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜μ—¬ μ‚¬μš© 쀑인 μ •ν™•ν•œ ν”„λ‘œν•„μ„ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€:

find /etc/apparmor.d/ -name "*lowpriv*" -maxdepth 1 2>/dev/null

μ΄μƒν•œ κ²½μš°μ— apparmor 도컀 ν”„λ‘œν•„μ„ μˆ˜μ •ν•˜κ³  λ‹€μ‹œ λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ œν•œμ„ μ œκ±°ν•˜κ³  β€œμš°νšŒβ€œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

AppArmor Docker Bypass2

AppArmorλŠ” 경둜 κΈ°λ°˜μž…λ‹ˆλ‹€. μ΄λŠ” **/proc**와 같은 디렉토리 λ‚΄μ˜ νŒŒμΌμ„ λ³΄ν˜Έν•˜κ³  μžˆμ„μ§€λΌλ„, μ»¨ν…Œμ΄λ„ˆκ°€ μ–΄λ–»κ²Œ 싀행될지λ₯Ό ꡬ성할 수 μžˆλ‹€λ©΄, 호슀트의 proc 디렉토리λ₯Ό **/host/proc**에 λ§ˆμš΄νŠΈν•  수 있으며, 그러면 더 이상 AppArmor에 μ˜ν•΄ λ³΄ν˜Έλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

AppArmor Shebang Bypass

이 λ²„κ·Έμ—μ„œ νŠΉμ • λ¦¬μ†ŒμŠ€μ™€ ν•¨κ»˜ perl 싀행을 λ°©μ§€ν•˜κ³  μžˆλ”λΌλ„, 첫 번째 쀄에 **#!/usr/bin/perl**을 μ§€μ •ν•œ μ…Έ 슀크립트λ₯Ό μƒμ„±ν•˜κ³  νŒŒμΌμ„ 직접 μ‹€ν–‰ν•˜λ©΄, μ›ν•˜λŠ” 것을 μ‹€ν–‰ν•  수 μžˆλŠ” 예λ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 예:

echo '#!/usr/bin/perl
use POSIX qw(strftime);
use POSIX qw(setuid);
POSIX::setuid(0);
exec "/bin/sh"' > /tmp/test.pl
chmod +x /tmp/test.pl
/tmp/test.pl

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 μ§€μ›ν•˜κΈ°