μλ νμΈμ μ¬λ¬λΆ. μ°λ¦¬λ μ κ·Ήμ μΌλ‘ μμ μ μ°©μνκ³ μμΌλ©° μ΄λ―Έ XNUMXμμ λ§μ κ°λ ₯ν μΆμλ₯Ό μ€λΉνκ³ μμ΅λλ€. κ·Έ μ€μμλ λͺ¨λκ° μ’μνλ μλ‘μ΄ κ³Όμ μ λ±λ‘μ΄ λ°νλμμ΅λλ€. . μΆμλ₯Ό μμνμ¬ μ°λ¦¬λ μ ν΅μ μΌλ‘ μ μ©ν μλ£μ λ²μμ 곡μ ν©λλ€.

νμΌ κΆνμ SUID μ€ν νμΌμ λν μμ ν λμμ μ 곡νμ§λ§ μ²μμλ μ½κ° νΌλμ€λ¬μ λ³΄μΌ μ μμ΅λλ€.
μ°λ¦¬ λͺ¨λλ λ°μ΄λ리λ₯Ό μκ³ μμ΅λλ€. μλ₯΄ . λ€νν μ ν리μΌμ΄μ
μ μ νλ κΆνμ΄ νμν κ²½μ° λ€μκ³Ό κ°μ λ³΄λ€ ν¨μ¨μ μΈ λ°©λ²μ΄ μμ΅λλ€. .
μμ κΈ°μ¬λ₯Ό μμΈν μ½μ§ μμΌλ €λ©΄ μκ°μ μ μ½ν΄ λλ¦¬κ² μ΅λλ€. κΈ°λ³Έμ μΌλ‘ νμΌ κΆνμ 루νΈλ‘ μ€νλλ νλ‘μΈμ€λ₯Ό νμ©νλ―λ‘ νΉμ κΈ°λ₯μ μ μ§νκΈ° μν΄ μμ μ μνν μ μμ΅λλ€. κΆνμ μμ νκ³ κΆνμ΄ μλ μ¬μ©μκ° μ€νν λ. μ΄λ 곡격μκ° λ²νΌ μ€λ²νλ‘ λλ κΈ°ν μ μ©μ μ¬μ©νμ¬ νλ‘μΈμ€λ₯Ό μμμν€λ κ²½μ° νλ‘μΈμ€μ μ€μ λ‘ νμν νΉμ μ΅μ κΆν μΈμλ μ΄λ€ κ²λ μ΄μ©ν μ μμμ μλ―Έν©λλ€.
κΆν μ€μ μ μΌλ°μ μΌλ‘ λ£¨νΈ κΆνμΌλ‘ μ€νλλ μλΉμ€μ μ μ©νμ§λ§, λͺ
λ Ήμ€ μ νΈλ¦¬ν°λ μ΄λ¨κΉμ? λ€νν μ μ ν μ νΈλ¦¬ν°κ° μ€μΉλμ΄ μλ€λ©΄ λͺ
λ Ήμ€ μ νΈλ¦¬ν°λ μ¬μ©ν μ μμ΅λλ€. Ubuntuμλ₯Ό λ€μ΄, ν¨ν€μ§κ° νμν κ²μ
λλ€. libcap2-bin. λν λΉκ΅¬μ 컀λ(λ²μ λΆν°)μ μ€νν΄μΌ ν©λλ€. 2.6.24).
μ΄λ¬ν κΈ°λ₯μ μ¬μ©νλ©΄ SUID λΉνΈ μ€μ κ³Ό μ μ¬νκ² κΆνμ μ€ν νμΌκ³Ό μ°κ²°ν μ μμ§λ§ νΉμ κΆν μ§ν©μ λν΄μλ§ κ°λ₯ν©λλ€. 곡μ΅μ¬μ
setcap νμΌμμ κΆνμ μΆκ°νκ³ μ κ±°νλ λ° μ¬μ©λ©λλ€.
첫 λ²μ§Έ λ¨κ³λ νμν κΆνμ μ ννλ κ²μ
λλ€. μ΄ κΈ°μ¬μμλ λ€μκ³Ό κ°μ λ€νΈμν¬ μ§λ¨ λκ΅¬κ° μλ€κ³ κ°μ ν©λλ€. tracewalk, μ΄λ λ€μμ μ¬μ©ν μ μμ΄μΌ ν©λλ€. . μΌλ°μ μΌλ‘ μμ© νλ‘κ·Έλ¨μ 루νΈλ‘ μ€νν΄μΌ νμ§λ§ λ³Ό λ νκ°λ§ νμνλ€λ κ²μ΄ λ°νμ‘μ΅λλ€ CAP_NET_RAW.
λ°μ΄λλ¦¬κ° μλ λλ ν 리μ μλ€κ³ κ°μ ν©λλ€. tracewalk, λ€μκ³Ό κ°μ΄ μ΄ κΆνμ μΆκ°ν μ μμ΅λλ€.
sudo setcap cap_net_raw=eip tracewalk μ§κΈμ μ λ―Έμ¬λ₯Ό 무μνμΈμ. =eip ν΄κ²° λ°©λ²μ λν΄μλ λͺ μ΄ νμ μ΄μΌκΈ°νκ² μ΅λλ€. κΆν μ΄λ¦μ μλ¬Έμμ
λλ€. μ΄μ λ€μμ μ¬μ©νμ¬ κΆνμ μ¬λ°λ₯΄κ² ꡬμ±νλμ§ νμΈν μ μμ΅λλ€.
setcap -v cap_new_raw=eip tracewalkλλ νΉμ μ€ν νμΌμ λν΄ μ€μ λ λͺ¨λ κΆνμ λμ΄ν μ μμ΅λλ€.
getcap tracewalk
μ°Έκ³ λ‘ λ€μμ μ¬μ©νμ¬ μ€ν νμΌμμ λͺ¨λ κΆνμ μ κ±°ν μλ μμ΅λλ€.
setcap -r tracewalkμ΄ μμ μμ κΆνμ΄ μλ μ¬μ©μλ‘ μ€ν νμΌμ μ€νν μ μμ΄μΌ νλ©° μμ μμΌμΌλ‘ μμ ν μ μμ΄μΌ νμ§λ§ λ£¨νΈ μ¬μ©μκ° κ°λ λ€λ₯Έ κΆνμ μμ΄μΌ ν©λλ€.
κ·Έλ λ€λ©΄ μ΄ μ΄μν μ λ―Έμ¬λ 무μμ μλ―Ένλ κ±ΈκΉμ? =eip? μ΄λ₯Ό μν΄μλ κΆνμ μ±κ²©μ μ΄λ μ λ μ΄ν΄ν΄μΌ ν©λλ€. κ° νλ‘μΈμ€μλ μΈ κ°μ§ κΆν μΈνΈκ° μμ΅λλ€. ν¨κ³Όμ μ΄κ³ μμ κ°λ₯νλ©° νμ©λ¨:
- ν¨κ³Όμ μΈ κΆνμ νλ‘μΈμ€κ° μ€μ λ‘ μνν μ μλ μμ
μ μ μνλ κΆνμ
λλ€. μλ₯Ό λ€μ΄ λ€μκ³Ό κ°μ κ²½μ° μμ μμΌμ μ²λ¦¬ν μ μμ΅λλ€.
CAP_NET_RAWμ ν¨ μΈνΈμ μμ΅λλ€. - μ¬μ© κ°λ₯ κΆνμ μ μ ν νΈμΆμ μ¬μ©νμ¬ μμ²νλ κ²½μ° νλ‘μΈμ€κ° κ°μ§ μ μλ κΆνμ λλ€. ν΄λΉ κΆνμ μμ²νκΈ° μν΄ νΉλ³ν μμ±λμ§ μμ ν νλ‘μΈμ€κ° μ€μ λ‘ μ΄λ€ μμ λ μννμ§ λͺ»νλλ‘ λ°©μ§ν©λλ€. μ΄λ₯Ό ν΅ν΄ μ€μ λ‘ νμν κΈ°κ° λμμλ§ μ ν¨ μ§ν©μ μ€μν κΆνμ μΆκ°νλ νλ‘μΈμ€λ₯Ό μμ±ν μ μμ΅λλ€.
- μμ κ°λ₯ κΆνμ μμ±λ μμ νλ‘μΈμ€μ μ‘μΈμ€ κ°λ₯ν μ§ν©μμ μμλ μ μλ κΆνμ
λλ€. μμ μ€
fork()λλclone()νμ νλ‘μΈμ€μλ ν΄λΉ μμ μ μ¬μ ν λμΌν μ€ν νμΌμ΄ μ€ν μ€μ΄λ―λ‘ νμ μμ νλ‘μΈμ€μ κΆν μ¬λ³Έμ΄ μ 곡λ©λλ€. μμ κ°λ₯ν μΈνΈλ λ€μκ³Ό κ°μ κ²½μ°μ μ¬μ©λ©λλ€.exec()(λλ μ΄μ μμνλ)μ΄ νΈμΆλμ΄ μ€ν νμΌμ λ€λ₯Έ νμΌλ‘ λ체ν©λλ€. μ΄ μμ μμ νλ‘μΈμ€μ μ¬μ© κ°λ₯ν μ§ν©μ μ νλ‘μΈμ€μ μ¬μ©λ μ‘μΈμ€ κ°λ₯ν μ§ν©μ μ»κΈ° μν΄ μμ κ°λ₯ν μ§ν©μΌλ‘ λ§μ€ν¬λ©λλ€.
κ·Έλμ μ νΈλ¦¬ν° setcap μ΄λ₯Ό ν΅ν΄ νΉμ μ€ν νμΌμ λν΄ μ΄ μΈ κ°μ§ μΈνΈμ κΆνμ λ
립μ μΌλ‘ μΆκ°ν μ μμ΅λλ€. κ·Έλ£Ήμ μλ―Έλ νμΌ κΆνμ λ°λΌ μ½κ° λ€λ₯΄κ² ν΄μλ©λλ€.
- μ¬μ© κ°λ₯ νμΌ κΆνμ μ€ν νμΌμ νΈμΆν μμ νλ‘μΈμ€μ κΆνμ΄ μλλΌλ μ€ν νμΌμ νμ μ¬μ©ν μ μλ κΆνμ λλ€. μμ μλ 'κ°μ ' νκ°λΌκ³ λΆλ μ΅λλ€.
- μμλ¨ νμΌ κΆνμ νΈμΆ νλ‘μΈμ€ μΈνΈμμ κΆνμ μ κ±°νλ λ°μλ μ¬μ©ν μ μλ μΆκ° λ§μ€ν¬λ₯Ό μ μν©λλ€. νΈμΆ νλ‘μΈμ€μ μμλ μ§ν©μ μΆκ°λ‘ μ μ©λλ―λ‘ λ μ§ν©μ λͺ¨λ μ‘΄μ¬νλ κ²½μ°μλ§ κΆνμ΄ μμλ©λλ€.
- μ ν¨ν νμΌ κΆνμ μ€μ λ‘ μΈνΈκ° μλ λ¨μΌ λΉνΈμ λΆκ³Όνλ©°, μ€μ λλ©΄ μ¬μ© κ°λ₯ν μ 체 μΈνΈκ° μ νλ‘μΈμ€μ μ ν¨ μΈνΈμλ 볡μ¬λλ€λ μλ―Έμ λλ€. μ΄λ κΆνμ μμ²νλλ‘ νΉλ³ν μμ±λμ§ μμ νλ‘μΈμ€μ κΆνμ μΆκ°νλ λ° μ¬μ©ν μ μμ΅λλ€. XNUMXλΉνΈμ΄λ―λ‘ μ΄λ€ κΆνμ λν΄ μ€μ νλ€λ©΄ λͺ¨λ κΆνμ λν΄ μ€μ ν΄μΌ ν©λλ€. κΆνμ μ§μνμ§ μλ μμ© νλ‘κ·Έλ¨μμ κΆνμ μ¬μ©ν μ μλλ‘ νμ©νλ λ° μ¬μ©λλ―λ‘ λ κ±°μ λΉνΈλΌκ³ μκ°ν μ μμ΅λλ€.
λ€μμ ν΅ν΄ κΆνμ μ§μ ν λ setcap μΈ κΈμ e, i ΠΈ p κ΄λ ¨νλ€ ν¨κ³Όμ μ΄κ³ μμ κ°λ₯νλ©° μ κ·Ό κ°λ₯ κ°κ° μ€μ ν©λλ€. λ°λΌμ μ΄μ μ¬μμ λ€μκ³Ό κ°μ΅λλ€.
sudo setcap cap_net_raw=eip tracewalk ...ν΄μλλ₯Ό λνλ
λλ€. CAP_NET_RAW μ¬μ© κ°λ₯νκ³ μμ κ°λ₯ν μΈνΈμ μΆκ°λμ΄μΌ νλ©° μ ν¨ λΉνΈλ μ€μ λμ΄μΌ ν©λλ€. μ΄λ νμΌμ λν΄ μ΄μ μ μ€μ λ κΆνμ μ¬μ μν©λλ€. ν λ²μ μ¬λ¬ κΆνμ μ€μ νλ €λ©΄ μΌνλ‘ κ΅¬λΆλ λͺ©λ‘μ μ¬μ©νμΈμ.
sudo setcap cap_net_admin,cap_net_raw=eip tracewalkμ΄ λͺ¨λ κ²μ λν΄ λ μμΈν λ Όμνμ§λ§, μ΄ κ²μλ¬Όμ΄ λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ μ’ λ λͺ ννκ² μ€λͺ ν΄μ£ΌκΈ°λ₯Ό λ°λλλ€. μΈκΈν λͺ κ°μ§ μ£Όμ μ¬νκ³Ό μλ Ήλ§ λ¨μμ΅λλ€.
첫째, νμΌ κΈ°λ₯μ μ¬λ³Όλ¦ λ§ν¬μ ν¨κ» μλνμ§ μμ΅λλ€. μ΄λ₯Ό λ°μ΄λ리 νμΌ μ체(μ¦, μ¬λ³Όλ¦ λ§ν¬μ λμ)μ μ μ©ν΄μΌ ν©λλ€.
λμ§Έ, ν΄μλ μ€ν¬λ¦½νΈμμλ μλνμ§ μμ΅λλ€. μλ₯Ό λ€μ΄, κΆνμ ν λΉνλ €λ Python μ€ν¬λ¦½νΈκ° μλ κ²½μ° μ΄λ₯Ό Python μΈν°νλ¦¬ν° μ체μ ν λΉν΄μΌ ν©λλ€. λΆλͺ
ν μ΄κ²μ μ μ¬μ μΈ λ³΄μ λ¬Έμ μ
λλ€. μλνλ©΄ ν΄λΉ μΈν°ν리ν°λ‘ μ€νλ λͺ¨λ μ€ν¬λ¦½νΈλ μ§μ λ κΆνμ κ°κ² λμ§λ§ SUIDλ‘ λ§λλ κ²λ³΄λ€ μ¬μ ν ν¨μ¬ λ«μ΅λλ€. κ°μ₯ μΌλ°μ μΈ ν΄κ²° λ°©λ²μ νμν μμ
μ μννκ³ μ€ν¬λ¦½νΈμμ νΈμΆν μ μλ λ³λμ μ€ν νμΌμ C λλ μ΄μ μμνλ μΈμ΄λ‘ μμ±νλ κ² κ°μ΅λλ€. μ΄λ λ°μ΄λ리λ₯Ό μ¬μ©νλ Wiresharkμμ μ¬μ©νλ μ κ·Ό λ°©μκ³Ό μ μ¬ν©λλ€. /usr/bin/dumpcap κΆν μλ μμ
μ μννλ €λ©΄ λ€μμ μνν©λλ€.
$ getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip μ
μ§Έ, νκ²½ λ³μλ₯Ό μ¬μ©νλ©΄ νμΌ κΆνμ΄ λΉνμ±νλ©λλ€. LD_LIBRARY_PATH λͺ
λ°±ν 보μμμ μ΄μ λ‘(1). μλ λμΌνκ² μ μ© LD_PRELOAD, λ΄κ° μλ ν.
1. 곡격μλ λΆλͺ
ν νμ€ λΌμ΄λΈλ¬λ¦¬ μ€ νλλ₯Ό κ΅μ²΄νκ³ μ¬μ©ν μ μμΌλ―λ‘ LD_LIBRARY_PATHν΄λΉ λΌμ΄λΈλ¬λ¦¬κ° μμ€ν
λΌμ΄λΈλ¬λ¦¬λ³΄λ€ μ°μ μ μΌλ‘ νΈμΆλλλ‘ νμ¬ νΈμΆ μ ν리μΌμ΄μ
κ³Ό λμΌν κΆνμΌλ‘ μ체 μμ μ½λκ° μ€νλλλ‘ ν©λλ€.
κ·Έκ² λ€μΌ. κ°μ’ νλ‘κ·Έλ¨μ λν μμΈν λ΄μ©μ λ€μμμ νμΈν μ μμ΅λλ€.
μΆμ² : habr.com
