웹사이트 검색

Shellshock Bash 취약점으로부터 서버를 보호하는 방법


소개

2014년 9월 24일에 Shellshock 또는 "Bash 버그\라고 하는 GNU Bash 취약점이 공개되었습니다. 간단히 말해 이 취약점을 통해 원격 공격자는 환경 변수에 따라 코드 문자열을 전달하여 특정 조건에서 임의의 코드를 실행할 수 있습니다. Linux, BSD 및 Mac OS X 배포판 사이에서 Bash의 유비쿼터스 상태로 인해 많은 컴퓨터가 Shellshock에 취약하며 1.14에서 4.3 사이의 모든 패치되지 않은 Bash 버전(즉, 지금까지의 모든 릴리스)이 위험에 처해 있습니다.

권한이 없는 원격 사용자가 Bash 환경 변수를 할당하도록 허용하는 서비스 또는 응용 프로그램을 실행 중인 시스템에서 Shellshock 취약점을 악용할 수 있습니다. 악용 가능한 시스템의 예는 다음과 같습니다.

  • Bash로 작성되거나 Bash 서브쉘로 실행되는 CGI 스크립트(mod_cgimod_cgid를 통해)를 사용하는 Apache HTTP 서버
  • 특정 DHCP 클라이언트
  • ForceCommand 기능을 사용하는 OpenSSH 서버
  • Bash를 사용하는 다양한 네트워크 노출 서비스

버그에 대한 자세한 설명은 CVE-2014-7187에서 찾을 수 있습니다.

Shellshock 취약점은 OpenSSL Heartbleed 버그보다 훨씬 광범위하고 특히 악용하기 쉽기 때문에 영향을 받는 시스템을 적절하게 업데이트하여 가능한 한 빨리 취약점을 수정하거나 완화하는 것이 좋습니다. 머신이 취약한지 테스트하는 방법과 취약한 경우 Bash를 업데이트하여 취약성을 제거하는 방법을 보여줍니다.

시스템 취약점 확인

Bash를 실행하는 각 시스템에서 bash 프롬프트에서 다음 명령을 실행하여 Shellshock 취약점을 확인할 수 있습니다.

env 'VAR=() { :;}; echo Bash is vulnerable!' 'FUNCTION()=() { :;}; echo Bash is vulnerable!' bash -c "echo Bash Test"

명령에서 강조 표시된 echo Bash는 취약합니다! 부분은 원격 공격자가 악성 코드를 삽입할 수 있는 위치를 나타냅니다. 환경 변수 할당 내에서 함수 정의를 따르는 임의 코드. 따라서 다음 출력이 표시되면 Bash 버전이 취약하므로 업데이트해야 합니다.

Bash is vulnerable!
Bash Test

출력에 시뮬레이트된 공격자의 페이로드가 포함되지 않은 경우, 즉 "Bash는 취약합니다.\가 출력으로 인쇄되지 않으면 적어도 첫 번째 취약성(CVE-2014-6271)에 대해 보호되지만 다른 CVE에 취약할 수 있습니다. 출력에 bash 경고나 오류가 있으면 Bash를 최신 버전으로 업데이트해야 합니다. 이 프로세스는 다음 섹션에서 설명합니다.

테스트 명령에서 출력되는 내용이 다음뿐이라면 Bash는 Shellshock으로부터 안전한 것입니다.

Bash Test

원격 사이트 테스트

웹사이트 또는 특정 CGI 스크립트가 취약한지 테스트하려면 'ShellShock' Bash Vulnerability CVE-2014-6271 테스트 도구 링크를 사용하십시오.

테스트할 웹사이트의 URL이나 CGI 스크립트를 적절한 형식으로 입력하고 제출하기만 하면 됩니다.

취약점 수정: Bash 업데이트

취약점을 수정하는 가장 쉬운 방법은 기본 패키지 관리자를 사용하여 Bash 버전을 업데이트하는 것입니다. 다음 하위 섹션에서는 Ubuntu, Debian, CentOS, Red Hat 및 Fedora를 비롯한 다양한 Linux 배포판에서 Bash를 업데이트하는 방법을 다룹니다.

APT-GET: 우분투/데비안

현재 지원되는 Debian 버전의 경우 Bash를 apt-get을 통해 사용 가능한 최신 버전으로 업데이트합니다.

sudo apt-get update && sudo apt-get install --only-upgrade bash

이제 이전 섹션(시스템 취약성 확인)의 명령을 실행하여 시스템 취약성을 다시 확인하십시오.

수명 종료 우분투/데비안 릴리스

수명 종료 상태로 간주되는 Ubuntu/Debian 릴리스를 실행 중인 경우 패키지 관리자를 사용하여 Bash를 업데이트하려면 지원되는 것으로 업그레이드해야 합니다. 다음 명령을 사용하여 새 릴리스로 업그레이드할 수 있습니다(문제가 발생할 경우를 대비하여 먼저 서버와 중요한 데이터를 백업하는 것이 좋습니다).

sudo do-release-upgrade

업그레이드가 완료되면 Bash를 업데이트해야 합니다.

YUM: CentOS/레드햇/페도라

yum을 통해 사용 가능한 최신 버전으로 Bash를 업데이트합니다.

sudo yum update bash

이제 이전 섹션(시스템 취약성 확인)의 명령을 실행하여 시스템 취약성을 다시 확인하십시오.

수명 종료 CentOS/Red Hat/Fedora 릴리스

수명 종료 상태로 간주되는 CentOS/Red Hat/Fedora 릴리스를 실행 중인 경우 패키지 관리자를 사용하여 Bash를 업데이트하려면 지원되는 것으로 업그레이드해야 합니다. 다음 명령을 사용하여 새 릴리스로 업그레이드할 수 있습니다(문제가 발생할 경우를 대비하여 먼저 서버와 중요한 데이터를 백업하는 것이 좋습니다).

sudo yum update

업그레이드가 완료되면 Bash를 업데이트해야 합니다.

결론

영향을 받는 모든 서버를 최신 버전의 Bash로 업데이트하십시오! 또한 최신 보안 업데이트로 서버를 최신 상태로 유지하십시오!