[서버 관리] GNU Bash 원격 임의코드 실행 취약점 보안 업데이트 권고
GNU 리눅스(Linux)의 Bourne again shell의 원격 임의코드 실행이 가능한 보안 취약점이 발견되어 인터넷침해대응센터(KISA) 홈페이지에 보안공지가 올라왔다.(2014년 9월 26일, (CVE-2014-6271 원격명령 실행, CVE-2014-7169 함수 선언문 파싱 에러)
Bash 쉘에서 환경변수 처리하는 과정에서 취약점이 발생하여, 공격자가 시스템 보안을 우회하여 쉘 명령어를 실행할 수 있다는 내용이었고, 패치 이후에도 우회 가능한 취약점이 추가로 발견되어, 추가 패치에 대한 공지도 갱신되었다.(2014년 9월 30일, CVE-2014-7186 잘못된 메모리 접근, CVE-2014-7187 잘못된 메모리 접근, CVE-2014-6277 함수 선언문 파싱 에러)
상세 내용은 KISA 홈페이지 공지글에 올라와있다.
* 참고글: KISA, Bourn again shell (Bash) 임의코드 실행 취약점 보안 업데이트 권고 (2차) 2014.09.26 ( http://krcert.or.kr/kor/data/secNoticeView.jsp?p_bulletin_writing_sequence=22005 )
GNU Bash 4.3 및 이전 버전이 모두 영향을 받을 수 있으며, 리눅스 rpm 명령이나 패키지(dpkg) 명령을 통해 버전 확인이 가능하다.
rpm -q bash
dpkg -s bash | grep Version
KISA 공지글에서는 운영체제에 따라서는 업데이트를 적용해도 Bash 버전이 변경되지 않는 경우가 있어, 취약점 확인 방법으로 패치가 정확하게 수행되었는지 확인할 것을 권고하고 있다. 자세한 확인 방법 및 패치 업데이트 방법은 위 취약점 공지글 링크(krcert)의 첨부파일([KISA]_GNU_Bash_원격명령실행_취약점_대응_방안_권고.pdf) 파일을 참고하도록 한다.
Bash 취약점 패치 업데이트를 적용하지 않은 리눅스 서버에서, 5개의 취약점 점검 쉘 명령으로 점검한 결과... 취약점이 존재하는 것으로 확인 됨
* 취약점 확인 방법
- CVE-2014-6271 (원격명령 실행) 확인
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
(vulerable 메시지가 나오면 취약)
- CVE-2014-7169 함수 선언문 파싱 에러 확인
env X='() { (a)=>\' bash -c "echo date"; cat echo ; rm -f echo
(date 내용이 보이면 취약. cat: echo: No such file or directory 라고 나와야 정상)
- CVE-2014-7186 잘못된 메모리 접근 확인
bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF<<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' || echo "CVE-2014-7186 vulnerable, redir_stack"
(vulnerable 문구가 보이면 취약점 존재)
- CVE-2014-7187 잘못된 메모리 접근 확인
(for x in {1..200} ; do echo "for x$x in ; do :"; done; for x in {1..200} ; do echo done ; done) | bash || echo "CVE-2014-7187 vulnerable, word_lineno"
(vulnerable 이라고 나오면 취약점 미해결)
- CVE-2014-6277 (함수 선언문 파싱 에러) 확인
foo='() { echo not patched; }' bash -c foo
(not patched 라고 보이면 취약함)
# bashchk.sh file example...
echo
echo =====================================================
echo 1. CVE-2014-6271 remote command check.
echo VULNERABLE if \"vulnerable\" message appears.
echo - - - - - - - - - - - - - - - - - - - - - - - - - - -
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
echo
echo =====================================================
echo 2. CVE-2014-7169 function definition parsing error check.
echo VULNERABLE if todays date and time appear.
echo when \"cat: echo: No such file or directory\" appears, it\'s patched and safe.
echo - - - - - - - - - - - - - - - - - - - - - - - - - - -
env X='() { (a)=>\' bash -c "echo date"; cat echo ; rm -f echo
echo
echo =====================================================
echo 3. CVE-2014-7186 wrong memory access check.
echo VULNERABLE if \"vulnerable\" message appears.
echo - - - - - - - - - - - - - - - - - - - - - - - - - - -
bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF<<EOF <<EOF <<EOF <<EOF<<EOF <<EOF' || echo "CVE-2014-7186 vulnerable,redir_stack"
echo
echo =====================================================
echo 4. CVE-2014-7187 wrong memory access check.
echo VULNERABLE if \"vulnerable\" message appears.
echo - - - - - - - - - - - - - - - - - - - - - - - - - - -
(for x in {1..200} ; do echo "for x$x in ; do :"; done; for x in {1..200} ; do echo done ; done) | bash || echo "CVE-2014-7187 vulnerable, word_lineno"
echo
echo =====================================================
echo 5. CVE-2014-6277 function definition parsing error check.
echo VULNERABLE if \"not patched\" message appears.
echo - - - - - - - - - - - - - - - - - - - - - - - - - - -
foo='() { echo not patched; }' bash -c foo
echo
echo =====================================================
echo
* 취약점 패치 링크
- CentOS(Cent-OS, 센트-OS): http://centosnow.blogspot.kr/2014/09/critical-bash-updates-for-centos-5.html
- Redhat(레드햇): https://rhn.redhat.com/erata/RHSA-2014-1306.html
- Ubuntu(우분투): http://www.ubuntu.com/usn/usn-2364-1/
- Fedora(페도라): http://fedoramagazine.org/updated-bash-packages-now-available-via-fedora-updates/
- Solaris(솔라리스/쏠라리스): https://support.oracle.com/rs?type=doc&id=1930090.1
- Suse(Su-Se, 수세리눅스): http://lists.opensuse.org/opensuse-security-announce/2014-09/msg00042.html
- Arch(아크리눅스): https://lists.archlinux.org/pipermail/arch-security/2014-September/000099.html
- Mac OS X: (1) http://support.apple.com/kb/DL1769
(2) http://support.apple.com/kb/DL1768
(3) http://support.apple.com/kb/DL1767
취약점 패치된 정상 리눅스 서버에서 명령어 테스트 결과. 명령어에 대한 반응이 없다.
KISA 공지 글 첨부파일의 pdf에서는 각 OS별 패키지 업데이트 방법도 소개되어있으나, 서버에서 직접 인터넷 접속이 가능한 경우, yum update bash (CentOS)나, rpm --import [업데이트 인터넷 주소] (Redhat) 등의 명령으로 업데이트 할 것을 소개하고 있다. 인터넷이 불가능할 경우에는 [붙임] Gnu Bash 취약점(ShellShock) FAQ 중 Q9에서 Gnu bash RPM 다운로드 사이트에서 직접 검색하여 설치하라고 나와있다.
* Gnu bash RPM 다운로드 사이트
- Redhat(레드햇): https://access.redhat.com/articles/11258
- CentOS: http://mirror.centos.org/centos
- 검색 사이트: http://rpmfind.net/linux/rpm2html/search.php?query=bash&submit=Search
자세한 내용은 KISA 공지 글의 pdf를 참고하는 것이 가장 정확할 듯 하다.
* 참고글: KISA, Bourn again shell (Bash) 임의코드 실행 취약점 보안 업데이트 권고 (2차) 2014.09.26 ( http://krcert.or.kr/kor/data/secNoticeView.jsp?p_bulletin_writing_sequence=22005 )