ANALYSIS BASH SHELL SHELLSHOCK BUG KIM DONG HYUN WHATTEAM & LET S CQ & KOREA IT TECHNICAL SCHOOL rlaehdgus213@naver.com 페이지 0 / 10
Analysis Bash Shell Shellshock BUG hackpupu CVE BUG Analysis http://hackerpupu.tistory.com Let s CQ TEAM WHATTEAM KOREA IT Technical School Straw Hat Penetration Team rlaehdgus213@naver.com 페이지 1 / 10
Warring! 주의사항 본문서는보안에관련되어있는문서입니다. 이문서를악용해오는피해사항은전적으로사 용한본인에게있습니다. 본문서를복사, 배포또는수정이가능하나, 본작성자에대한언급을해주셨으면합니다. 문서명 작성자 문서정보 Analysis Bash ShellShock Bug 김동현 (hackpupu) 개정이력 버전수정일자작성자개요 1.0v 2014/09/26 김동현원본작성 페이지 2 / 10
목차 ⅰ. 개요 1-1 개요 1-2 이번 BUG에대한고찰 1-3 This bug is like heartbleed bug 1-4 작성자소개 ⅱ. Analysis 2-1 취약정보 2-2 Bash Environment Variables Code injection 2-3 Remote Code Injection 2-4 Patch 후에대한이슈사항 ⅲ. 끝마치며 페이지 3 / 10
ⅰ. 개요 1-1 개요 이번 Exploit의경우, Bash 환경변수를이용한버그로, Code injection이되는 Critical한 Bug입니다. Bash를기반으로한, Software의경우 Remote Code injection도가능하며, 실예제코드의경우, Exploit-DB 또는여러해외 Security Research Blog에서설명을하고있습니다. 2014.09.24 최근에발견된버그로, 현재는 Patch가빠르게완료된상태입니다. 1-2 이번버그에대한고찰 이번버그의경우, 매우간단하게 Exploit이가능한데비해, 파급력이매우클것을예측이됩니다. Bash의경우, 현재나와있는 Linux / Unix 등 OS의기본 shell로설정이되어있으며, 사용자도 csh, ksh, born shell에비해높은편입니다. 저역시도, born again shell은 bash를기본으로사용하고있는현실입니다. 간단하게, 이번 Bug에대한설명을드리자면, bash의 Environment 즉, 환경변수에서발생하는취약점으로 Code injection이가능합니다. 임의코드실행을통해추가적인공격이가능하며, 현재개인적으로우려되는부분으로는 Remote code injection을통한, Web Shell Upload 사고가많이발생할수있을것이라생각됩니다. 14.09.26기준, IBM Security 보안연구소에서는, 인터넷위협수준을 AlertCon3으로상향조정했고, 국내기관인 Krcert에서는임의코드실행취약점으로인한보안업데이트권고를했습니다. IBM Security 보안연구소 : http://webapp.iss.net/gtoc/ Krcert: http://krcert.or.kr/kor/data/secnoticeview.jsp?p_bulletin_writing_sequence=21983 1-3 This bug is like heartbleed bug 현재, Heartbleed라는대형 Bug가세상에나온지, 약 5달정도흐른상황에서, 이번의 bash shellshock bug는치명적이라고생각됩니다. Heartbleed의경우 SSL/TLS를사용하는대부분의사이트에서취약점이도출되고, 개인정보유출을할수있는취약점이라고본다면, 이번의취약점은서버권한장악의시나리오를도출할수있는취약점이라고생각됩니다. 물론, Heartbleed Bug를통한서버권한장악이불가능할거라생각하지는않습니다. Heart bleed 가 Critical 했던이유는, OpenSSL을도입했던, 일반네트워크장비및보안장비들이상당수차지하고있었기에, Critical했다고말할수있고, 이번 Bash Shellshock Bug도못지않으며, 파급력부분에서더위험하면했지, 덜하지않을것이라생각됩니다. 1-4 작성자소개별거없는사람으로, 그저들은이야기많은잉여보안인력이다. 95년생으로액면가로만따지자면 85년생정도로추정된다. 밤새는걸즐겨하며, 술과담배를좋아한다. 목표는 50살전에우리나라보안인식을향상하는것과외국진출또는해킹연구소설립. 최근에는시스템 ( 굳이꼽자면 Android) 에매우관심이많은잉여. 페이지 4 / 10
ⅱ. Analysis 2-1 취약정보 이번 Bash Bug 의취약정보는아래와같습니다. Vulnerable bash Version Vulnable OS Version Vulnerable Test Not vulnerable Vulnerable Security update 기타 gnu:bash:1.14.0, 1.14.1, 1.14.2, 1.14.3, 1.14.4, 1.14.5, 1.14.6, 1.14.7 gnu:bash:2.0, 2.01, 2.01.1, 2.02, 2.02.1, 2.03, 2.04, 2.05, 2.50:a, 2.50:b, gnu:bash:3.0, 3.0.16, 3.1, 3.2, 3.2.48 gnu:bash:4.0, 4.0:rc1, 4.1, 4.2, 4.3 Ubuntu Linux: 12.04 LTS i386, 12.04 LTS amd64, 10.04 sparc, 10.04 powerpc, 10.04 i386, 10.04 ARM, 10.04 amd64 Debian Linux: 6.0 sparc, 6.0 s/390, 6.0 powerpc, 6.0 mips, 6.0 ia-64, 6.0 ia-32, 6.0 arm, 6.0 amd64 CentOS : 5 env x='() { :;}; echo vulnerable' bash -c 'echo hello' Bash: waring: x: ignoring function definition attempt Bash: error importing function definition for `x Hello Vulnerable Hello RHLE / CentOS : yum update bash Ubuntu / Debian : sudo apt-get update &&sudo apt-get install bash MAC : port upgrade bash (or brew update && brew upgrade bash) 패치후, 특정환경에서의또다른취약점 (CVE-2014-7169) https://access.redhat.com/articles/1200223 2-1-1. Vulnerable Version Preview 현재, 위의표에서참고할만한, Security update로 Patch를한 Version은상관이없는부분입니다. ( 현재대부분의 Repo를제공하는 Site에서는 Patch된버전을 Download 받음.) 위의표의 Vulnerable Bash Version 에서나열된 Bash의 Version들은현재, http://ftp.gnu.org/gnu/bash/ 의모든버전을포함하고있습니다. 특정환경에서의또다른취약점이나오는걸로보아, Patch된 Code도마냥신뢰하고, 기다리기보다는해당취약점에대해이해를하고, 보안관리를지속적으로해야될것으로보입니다. 페이지 5 / 10
2-2. Bash Environment Variables Code injection 2-2-1. 진단방법. 수동진단은간단하게, Shell 창하나에서진단이가능합니다. #bash #env x= () { :;}; echo vulnerable bash c echo hello 위와같은화면이나오면취약하다는내용입니다. 여기서하나특이점이, 환경변수를이용 해서, Exploit 할수있다는점인데요, 간단히도식화해보면아래와같은구조를가지게됩 니다. [ 환경변수 ]= () {return; }; [Exploit code] 실제, 위의사진에서알수있듯이환경변수에들어가있는명령이먼저수행됨을확인할수있습니다. 문제점은, 환경변수에들어가는값이 실행 된다는것에있습니다. Bash의환경변수를이용해값을저장하는어플리케이션은매우많기때문입니다. 실제공격에응용하기위해서는환경변수에원하는코드를추가하고, 원격으로사용자가환경변수를접근할수있는어플리케이션이무엇인지알면여러시나리오를도출해낼수있습니다. 간단하게테스트코드등을이용해서검증하는방법도괜찮은방법중하나인듯합니다. 내부적으로 bash를호출하는구문즉, bash script로 cgi를짜뒀다거나 C 혹은파이썬등에서 subshell의형태로 bash를사용하는경우공격이가능합니다. 다만, 참고할점은 mod_php로사용되고있는 PHP Script는예외라고하고있습니다. 샘플코드의경우, Exploit-DB 등을참조해서사용할수있습니다. URL: http://www.exploitdb.com/exploits/34766/ 다만, 웹에서불러오지말고 Shell에서실행하라는내용을확인할수있습니다. 제가생각되는시나리오로는, User-Agent 또는여러환경변수에들어가는값 (sshd daemon 의전달인자등 ) 을통해서, web shell 또는악성코드, Local Exploit 등을설치후실행시켜서버의권한을장악한다거나, /etc/passwd 등의값을통해추가적인공격등을생각해볼수있으며, 가장쉽게할수있는부분은 Web에서의 User-Agent 값변조를통한 Web Shell 다운로드후추가적인공격이있겠습니다. 아래는 Security Blog에서대표적인사례들을모아놓은부분입니다. 대부분이생각했을또는생각할시나리오가적혀있습니다. 전, DHCP 도환경변수가응용되는지처음알았네요. 페이지 6 / 10
- ForceCommand is used in sshd configs to provide limited command execution capabilities for remote users. This flaw can be used to bypass that and provide arbitrary command execution. Some Git and Subversion deployments use such restricted shells. Regular use of OpenSSH is not affected because users already have shell access. - Apache server using mod_cgi or mod_cgid are affected if CGI scripts are either written in bash, or spawn subshells. Such subshells are implicitly used by system/popen in C, by os.system/os.popen in Python, system/exec in PHP (when run in CGI mode), and open/system in Perl if a shell is used (which depends on the command string). - PHP scripts executed with mod_php are not affected even if they spawn subshells. - DHCP clients invoke shell scripts to configure the system, with values taken from a potentially malicious server. This would allow arbitrary commands to be run, typically as root, on the DHCP client machine. - Various daemons and SUID/privileged programs may execute shell scripts with environment variable values set / influenced by the user, which would allow for arbitrary commands to be run. - Any other application which is hooked onto a shell or runs a shell script as using bash as the interpreter. Shell scripts which do not export variables are not vulnerable to this issue, even if they process untrusted content and store it in (unexported) shell variables and open subshells. [ 출처 ] SECURITY BLOG DHCP관련 Remote 내용을찾아보다, 실제로테스트는못해보고 URL을남깁니다. Shellshock DHCP RCE Proof of Concept: https://www.trustedsec.com/september- 2014/shellshock-dhcp-rce-proof-concept/ 또한문서작성중, 패치로인한 Bug가새로운 issue로나왔는데요, CVE-2014-7169 입니다. 이거또한, 실제테스트는못해보고 URL로남깁니다. CVE-2014-7169: https://access.redhat.com/security/cve/cve-2014-7169 또한, 환경변수로인한임의코드실행말고도, DoS 취약점이나왔습니다. bash의가용성을침해하는문제가있다고하는데, 정확하게밝혀진바는아직없습니다. 다른능력자분들의보고서를기대해봅니다. 간단히본바로는아래와같은코드의 Segmentation fault를통해서 bash의가용성이침해된다고하는데, 제테스트환경에서는되지않네요. 어쨌든 Segmentation fault가나온다는말은추가적인 Exploit이가능하다는말이겠죠. # env X= () { :;}; shutup!!! bash c echo test bash: shutup!!!: command not found Segmentation fault 페이지 7 / 10
2-3. Remote Code Injection OS Version Bash Version SSHD Version Cent OS 6.5 Minimal 4.1.2(1)-release x86_64-redhat-linux-gnu OpenSSH_5.3p1 cgi-bin을통해서 Remote Code Injection 하는부분은국내문서및참고문서가많은것같아, ssh daemon을통한, Code Injection을해보겠습니다. 우선, 앞서 ssh에서도환경변수를사용하는가? 상당수의사용자정의를환경변수로지정하고있으며, 이로인한공격시나리오가충분히구상가능합니다. Ssh는접속시점에받은사용자인자값 (Argument) 을 $_SSH_ORIGINAL_COMMAND) 라는환경변수에저장하게됩니다. 다만, 여기서문제점은 bash의환경변수로저장된다는점입니다. 고로, 아래와같은 Exploit code가구상될수있습니다. $ssh victim@ip '() { :;}; /bin/cat /etc/passwd'.. 중간생략 그러면, 아래와같이환경변수에값이저장되며, bash shellshock bug 가발생하게됩니다. $SSH_ORIGINAL_COMMAND= () { :;}; /bin/cat /etc/passwd/ 우선, 공격대상서버의 sshd_config 파일을수정했습니다. ForceCommand를주어, 클라이언트가서버에접속시, ForceCommand에등록된명령어를실행하고종료되게만들었고, 클라이언트접속뒤에인자를붙이더라도 ls의인자로붙어처리되므로원하는명령어를수행하지못하고종료되게됩니다. 또한, 세미콜론을사용해도클라이언트의 bash에서받아들이기때문에, 올바른처리가되지않습니다. 하지만, bash shellshock bug 를통해작성하면, 해당서버의 ForceCommand 설정을무시하 고, Code Injection 이가능합니다. 페이지 8 / 10
2-4. 패치후의이슈사항 이미, 패치는완료가된상태입니다.. (2-1 참고 ) 하지만, 패치가적용된 bash또한여전히취약점을가지고있다고말할수있습니다. 아래와같은명령어로검증해볼수있으며, 에러가발생하며날짜가표시되면해당취약점을보유하고있는것입니다. 다만, 특정환경에서일어난다고하며, 타검증코드는 보다는미흡한수준입니다. 참고로알아두시면좋을것같습니다. $ env X='() { (a)=>;\' sh -c "echo date"; cat echo sh: X: line 1: syntax error near unexpected token </code>=' sh: X: line 1: <code>' sh: error importing function definition for </code>x' Fri Sep 26 08:05:17 KST 2014 $ 페이지 9 / 10
ⅲ. 끝마치며 이와비슷한, Bug에대한 Patch나대응방안도물론중요하겠지만, 이에대한 Bug를분석하고, 지식을습득하고또한이비슷한유형의 Bug가없다고단정지을수없습니다. 응용할수있는 Skill을기르는것도참으로중요하다고생각합니다. ( 문서작성중 Patch 후버그인 CVE-2014-7169가나와참당황했습니다. 특정환경에서만된다는글을읽고 PASS 해아쉽긴하네요.) 문서작성이다끝날즈음, Shellshock Bug를진단해주는사이트가나왔네요. 점점 Heartbleed처럼사업화되어가는느낌도듭니다. 자신이운영중인서버를수동으로점검할수없을때, 한번해보세요 ShellShock Bash Vulnerability Test Tool http://shellshock.brandonpotter.com/ ShellShcok BUG의조금더심도있는탐구를원하신다면, 위사이트맨밑의 View Code 를보는것도큰도움이될것같습니다. 페이지 10 / 10