리눅스 Bash 취약점 패치 방법 (CentOS 4.X 이하 버전 적용법) IT관련 이야기

리눅스에 사용되는 Bash 쉘의 아주 심각한 보안 취약점이 발견되었습니다.
공격자가 해당 쉘에 로그인 또는 해당 서버가 웹서비스등을 할 경우에는 쉽게 권한을 탈취당할 수 있습니다.


취약점 확인 방법의 경우 리눅스는 쉘에서 아래와 같이 확인할 수 있습니다.
# env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable
this is a test

리눅스(Redhat 5, CentOS 5 이상)의 경우 yum update bash 명령으로 패치를 즉각 할 수 있습니다.

패치를 한 후에는 다음과 같이 메시지가 바뀝니다.

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

또는

# 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


리눅스 구버전 (4.X 이전 버전의 경우)의 경우 yum 을 기본적으로 쓸 수 없고
쓸 수 있게 수정을 하더라도 패치된 bash를 받을 수 없습니다.

이 부분은 구글링 해서 찾아낸 방법을 조금 수정했으며 아래와 같이 하여 rpm을 생성하고 업데이트 하시면 됩니다.

1. mkdir -p /root/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} 

2. echo "%_topdir /root/rpmbuild/" > /root/.rpmmacros

3. rpm -Uvh http://vault.centos.org/4.9/apt/i386/SRPMS.updates/bash-3.0-27.el4.src.rpm

4. cd /root/rpmbuild/SOURCES/

5. wget http://ftp.gnu.org/pub/gnu/bash/bash-3.0-patches/bash30-017

6. bash30-017 파일 내용 중 3.0.16 을 3.0 으로 수정

7. cd /root/rpmbuild/SPECS/

8. bash.spec 파일 내용을 다음과 같이 수정

Release: 27%{?dist} -> Release: 27.2%{?dist}

Patch17: bash30-017 추가

#%patch16 -p0 -b .016 의 주석 해제
%patch17 -p0 -b .017 추가

9. rpmbuild -ba bash.spec

10. rpm -Fvh /root/rpmbuild/RPMS/i386/bash-3.0-27.2.i386.rpm


*** 추가 ***
-> 018, 019 두개의 패치가 추가되었습니다.
릴리즈 넘버 부분은 옵션이라 따로 기재하지 않았습니다.

wget http://ftp.gnu.org/gnu/bash/bash-3.0-patches/bash30-018
wget http://ftp.gnu.org/gnu/bash/bash-3.0-patches/bash30-019

28a29,31
> Patch17: bash30-017
> Patch18: bash30-018
> Patch19: bash30-019
110c113,116
< #%patch16 -p0 -b .016
---
> %patch16 -p0 -b .016
> %patch17 -p0 -b .017
> %patch18 -p0 -b .018
> %patch19 -p0 -b .019


덧글

  • 언덕위의공돌이 2014/10/02 17:57 # 삭제 답글

    한참 헤맷었는데 포스팅 참고해서 잘 해결하고 갑니다.
    즐거운 하루 보내세요. ^^
  • 로기 2014/10/07 13:03 # 삭제 답글

    5번부터 에러가 나고 6번에 파일을 어떻게 수정하는지..상세하게 알려주시면 고맙겠습니다...
  • 토디 2014/10/07 14:34 #

    wget 이 없거나 아니면 ftp 접속이 막혀있는 것이 아닐까 싶습니다.
    wget 아니더라도 ftp 접속해서 해당 파일 받으시면 됩니다.

    6번은 해당 파일 vi 등으로 열어보면 3.0.16 이라고 되어 있는 부분이 있는데 그걸 3.0으로 바꾸라는 이야기입니다.
  • 헤맨다 2014/10/08 15:09 # 삭제 답글

    저는 rhel 4 이고, 64비트입니다.
    위 5번의 경로에서 i386은 32비트인 거 같은데, x86_64 디렉토리가 없네요.
    그리고 RHEL 4에서도 apt 디렉토리의 자료를 써도 되는 건지요?

  • 토디 2014/10/08 18:02 #

    제가 해 보지 않은 부분이라 확실히 말씀드릴 수가 없네요
    레드햇쪽은 따로 제공되는 것도 있는 걸로 알고 있습니다만...
    이 방법으로도 되지 않을까 싶습니다.
  • 나그네 2014/10/15 10:38 # 삭제

    버전4 64비트의 경우 GNU에서 컴파일 버전으로 받아 설치하시면 깨끗합니다.
    32비트의 경우 컴파일 했다 문제생겨 고생했는데 여기에 답이 있었군요.
    감사
  • 나그네2 2014/10/15 13:51 # 삭제 답글


    CVE-2014-6271 는 해결이 되는데 CVE-2014-7169 는 안됩니다.
    http://serverfault.com/questions/631055/how-do-i-patch-rhel-4-for-the-bash-vulnerabilities-in-cve-2014-6271-and-cve-2014 를 참조하시는게 좋을꺼 같습니다.
  • 토디 2014/10/16 16:01 #

    감사합니다
  • 광대곰 2014/10/16 15:55 # 삭제 답글

    Red Hat 9 사용하는데 위와 같은 방법으로 해서 취약점 테스트 시 2개 항목에서 취약점이 발견 되네요...
    고민하던 중 bash 버전을 3.00.22 버전 (10/5일 배포) 으로 다시 설치하니 모든 취약점 문제가 해결되었습니다~
    참고하세요~ ^^
  • 토디 2014/10/17 09:13 #

    감사합니다
  • 오랫만에엔지니어 2015/01/15 10:11 # 삭제 답글

    감사합니다.
    버전이 낮아서 잊고있었는데,, 덕분에 해결하고 갑니다.
  • 오랫만에엔지니어 2015/01/15 10:11 # 삭제 답글

    감사합니다.
    버전이 낮아서 잊고있었는데,, 덕분에 해결하고 갑니다.
댓글 입력 영역